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...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); }
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????

Rispondi quotando