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????