codice:
void Grafo::Dijkstra(int start)
{
bool *v;
float m,*d;
int i,j,*p;
v = new bool[n_nodi];
d = new float[n_nodi];
p = new int[n_nodi];
for (int i=0;i<n_nodi;i++)
{
d[i]=INFINITO;
v[i]=false;
p[i]=-1;
}
d[start]=0;
do
{
m=INFINITO;
for (i=0;i<n_nodi;i++)
{
if (v[i]==false)
{
if (d[i]<m)
{
m=d[i];
j=i;
}
}
}
if (m!=INFINITO)
{
v[j]=true;
}
for (i=0;i<n_nodi;i++)
{
if (ListaAdiacenza[j][i]!= INFINITO)
{
if (d[i]>(d[j]+ListaAdiacenza[j][i]))
{
d[i]=d[j]+ListaAdiacenza[j][i];
p[i]=j;
}
}
}
}
while (m!=INFINITO);
}
questo è la versione codificata dell'algoritmo di dijkstra, cioè l'algoritmo che permette di calcolare il percorso minimo tra un nodo sorgente visitando tutti gli altri nodi facendo quanta meno strada possibile...
Ora, funziona a modo suo. Ho trovato a spasso x la rete questo grafo (allegato al thread) di cui fatto a carta e penna (e verificato sul sito in cui lo trovato) il percorso minimo è
0->3->1->2
Xo il codice ke vi ho dato mi da un'altro risultato
0->3->1
Visitando il nodo 2 a parte, facendo 0->2. Cioè la sorgente prende due strade...why???xke????