Pagini recente » Cod sursa (job #2828868) | Cod sursa (job #2088090) | Cod sursa (job #310640) | Cod sursa (job #3263390) | Cod sursa (job #1699216)
#include <fstream>
#include<cstring>
#include<climits>
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
int a[1000][1000],d[1001],viz[1001],n,m;
void citire ()
{ int x,y,k;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>k;
a[x][y]=k;
}
}
void init ()
{
for(int i=1;i<=n;i++)
{
d[i]=a[1][i];
if(d[i]==0) d[i]=INT_MAX;
}
d[1]=0;
viz[1]=1;
}
void dijkstra ()
{ int poz;
for(int i=1;i<=n-1;i++)
{ int minim=INT_MAX;
for(int j=2;j<=n;j++)
{
if(viz[j]==0)
{
if(d[j]<minim) {minim=d[j]; poz=j;}
}
}
if(minim==INT_MAX) break; viz[poz]=1;
for(int j=2;j<=n;j++)
{
if(d[j]>d[poz]+a[poz][j] && a[poz][j]!=0) d[j]=d[poz]+a[poz][j];
}
}
}
void afis ()
{
for(int i=2;i<=n;i++)
{if(d[i]==INT_MAX) d[i]=0;
cout<<d[i]<<" ";}
}
int main()
{
citire();
init();
dijkstra();
afis();
return 0;
}