Pagini recente » Cod sursa (job #325951) | Cod sursa (job #1717153) | Cod sursa (job #270959) | Cod sursa (job #632220) | Cod sursa (job #165409)
Cod sursa(job #165409)
#include <iostream>
#include <queue>
using namespace std;
#define FIN "dijkstra.in"
#define FOUT "dijkstra.out"
#define INF 0x3f3f3f3f
#define MAXN 50000
struct point { int v,c; point *l;} *G[MAXN];
int D[MAXN],n;
struct Comp
{
bool operator ()(const int &a , const int &b) {return D[a]>D[b];}
};
priority_queue <int , vector<int> , Comp> Q;
void read_data()
{
int m,x,y,c;
point *p;
freopen(FIN , "r" , stdin);
scanf("%d %d" , &n , &m );
while (m--)
{
scanf("%d %d %d" , &x , &y , &c);x--;y--;
p=new point; p->v=y; p->c=c; p->l=G[x]; G[x]=p;
}
fclose(stdin);
}
void write_data()
{
int i;
freopen(FOUT , "w" , stdout);
for( i=1;i<n-1;i++)
printf("%d " , (D[i]!=INF)?(D[i]):(0) );
printf ( "%d\n" , (D[i]!=INF)?(D[i]):(0) );
fclose(stdout);
}
void dijkstra(int s)
{
point *p;
memset (D,INF,(n+1)*sizeof(int));D[s]=0;
Q.push(s);
while(!Q.empty())
{
s = Q.top();Q.pop();
for(p=G[s];p;p=p->l)
if (D[p->v]>D[s]+p->c)
{
D[p->v]=D[s]+p->c;
Q.push(p->v);
}
}
}
int main()
{
read_data();
dijkstra(0);
write_data();
return 0;
}