Cod sursa(job #250841)

Utilizator StigmaSimina Pitur Stigma Data 31 ianuarie 2009 23:07:09
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream.h>
#include <fstream.h>
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int n,s[50000],min,t[50000],a[50000][50000],k,d[50000],nod;

void drum(int i)
{if (t[i]!=0) drum(t[i]);
 fout<<i<<" ";
}



int main()
{int i,j,c,r;
 fin>>n>>k;
 while(fin>>i>>j>>c)
  a[i][j]=a[j][i]=c;


  for (i=1;i<=n;i++)
   for (j=1;j<=n;j++)
    if (i!=j && a[i][j]==0)
     a[i][j]=32000;

 for (i=1;i<=n;i++)
  {d[i]=a[i][k];
   t[i]=1;

   }

  t[k]=0;
  s[k]=1;

for (r=1;r<n;r++)
{min=30000;
 for (i=1;i<=n;i++)
  if (!s[i] && min>d[i])
    {nod=i;
     min=d[i];
    }

  s[nod]=1;

 for (i=1;i<=n;i++)
  if (!s[i] && d[i]>d[nod]+a[nod][i])
   {d[i]=d[nod]+a[nod][i];
    t[i]=nod;
   }

   }

for (i=1;i<=n;i++)
if (i!=k)
 {drum(i);
  fout<<d[i]<<endl;
 }



fout.close();
return 0;
}