Pagini recente » Cod sursa (job #1471771) | Cod sursa (job #1160829) | Cod sursa (job #1594258) | Cod sursa (job #1881671) | Cod sursa (job #371268)
Cod sursa(job #371268)
#include <stdio.h>
#include <vector>
using namespace std;
const int nmax = 50001;
const int INF = 1 << 30;
vector<pair<int,int> > G[nmax];
pair<int,int> aux;
int N,M,d[nmax],viz[nmax];
void read()
{freopen("dijkstra.in","r",stdin);
int i,x,y,c;
scanf("%d %d",&N,&M);
for(i=1;i<=M;i++)
{scanf("%d %d %d",&x,&y,&c);
G[x].push_back(make_pair(y,c));
}
fclose(stdin);
}
void dijkstra()
{vector<pair<int,int> >::iterator it;
int i,j,min,indmin=0;
for(i=2;i<=N;i++) d[i]=INF;
for(i=1;i<=N;i++)
{min=INF;
for(j=1;j<=N;j++)
if(d[j]<min && !viz[j])
{min=d[j];indmin=j;}
viz[indmin]=1;
for(j=0;j<G[indmin].size();j++)
if(d[G[indmin][j].first]>d[indmin]+G[indmin][j].second)
d[G[indmin][j].first]=d[indmin]+G[indmin][j].second;
}
}
void write()
{freopen("dijkstra.out","w",stdout);
int i;
for(i=2;i<=N;i++) printf("%d ",d[i] == INF ? 0 : d[i]);
printf("\n");
fclose(stdout);
}
int main()
{read();
dijkstra();
write();
return 0;
}