Proszę o pomoc w usprawnieniu kodu, tak aby program znalazł najszybszą drogę z pierwszego wierzchołka do każdego innego. Jestem początkująca i nie do końca wiem jak to zrobić :)
#include <stdio.h>
#include <iostream>
#define n 8
#define INF 9999999
using namespace std;
int W[ n ][ n ] = {
{ 0, 5, 0, 0, 10, 0, 11, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0 },
{ 3, 2, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 2 },
{ 0, 0, 0, 2, 0, 0, 0, 0 },
{ 0, 0, 5, 0, 7, 0, 1, 0 } };
int Q[ n ] = { 1, 1, 1, 1, 1, 1, 1, 1 };
int D[ n ] = { INF, INF, INF, INF, INF, INF, INF, INF };
int P[ n ] = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 };
void Dijkstra( int s ) {
int u, v;
int Dmin;
D[ s ] = 0;
do {
Dmin = INF;
for( v = 0; v < n; ++v )
if( Q[ v ] && D[ v ] < Dmin ) {
u = v;
Dmin = D[ u ];
}
if( Dmin == INF ) break;
for( v = 0; v < n; v++ )
if( u != v && D[ v ] > W[ u ][ v ] + D[ u ] ) {
D[ v ] = W[ u ][ v ] + D[ u ];
P[ v ] = u;
}
}
while( 1 );
}
int main() {
int i, j;
cout << "Nasz graf:\n";
for( i = 0; i < n; ++i ) {
for( j = 0; j < n; j++ ) cout << W[ i ][ j ] << '\t';
cout << endl;
}
Dijkstra( 0 );
cout << "D = [";
for( i = 0; i < n; i++ ) cout << D[ i ] << '\t' << endl;
cout << "]\nP = [";
for( i = 0; i < n; i++ ) cout << P[ i ] << '\t' << endl;
cout << "]\n\n";
getchar();
return 0;
}