Pagini recente » Cod sursa (job #360372) | Cod sursa (job #268208) | Cod sursa (job #3212728) | Cod sursa (job #3147780) | Cod sursa (job #2105826)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int N,a,b,w,M;
int am[50010][50010];
int dis[50010];
int visited[50010];
void dij(int x){
visited[x]=1;
for (int i=1;i<=N;i++)
if (!visited[i] && am[x][i]!=-1)
if (dis[x]+am[x][i]<dis[i] || dis[i]==-1)
dis[i]=dis[x]+am[x][i];
int smaller=-1,sw=-1;
for (int i=1;i<=N;i++){
if(!visited[i] && dis[i]>=0)
if (dis[i]<sw || sw==-1){
sw=dis[i];
smaller=i;
}}
if (smaller!=-1){
dij(smaller);
return;
}
return;}
int main()
{
in>>N>>M;
for (int i=0;i<=N;i++){
for (int j=0;j<=N;j++)
am[i][j]=-1;
}
for (int i=1;i<=N;i++)
dis[i]=-1;
for (int i=1;i<=M;i++){
in>>a>>b>>w;
am[a][b]=w;
am[b][a]=w;
}
dis[1]=0;
dij(1);
for (int i=2;i<=N;i++){
out<<dis[i]<<' ';
}
return 0;
}