Pagini recente » Cod sursa (job #1918368) | Cod sursa (job #2300726) | Cod sursa (job #2199413) | Cod sursa (job #341323) | Cod sursa (job #694632)
Cod sursa(job #694632)
#include <iostream>
#include <fstream>
#define maxN 50005
#define maxM 250005
#define INF 0x3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,d[maxN],saw[maxN];
struct graf
{
int nod,cost;
graf *next;
} *G[maxN];
void addN(int x,int y,int z)
{
graf *q;
q=new graf;
q->nod=y;
q->cost=z;
q->next=G[x];
G[x]=q;
}
void read()
{
int i,a,b,c;
f>>n; f>>m;
for(i=1; i<=m ;i++)
{
f>>a; f>>b; f>>c;
addN(a,b,c);
addN(b,a,c);
}
for(i=1; i<=n ;i++)
{
saw[i]=0;
d[i]=INF;
}
d[1]=0;
}
void dijkstra()
{
graf *q;
int min,nod,i;
while(1)
{
min=INF;
nod=-1;
for(i=1; i<=n ;i++)
{
if(!saw[i] && min>d[i])
{
min=d[i];
nod=i;
}
}
if(min==INF) break;
saw[nod]=1;
for(q=G[nod]; q!=NULL ;q=q->next)
{
if(d[q->nod]>d[nod]+q->cost)
{
d[q->nod]=d[nod]+q->cost;
}
}
}
}
void print()
{
for(int i=1; i<=n ;i++)
g<<d[i]<<" ";
}
int main()
{
read();
dijkstra();
print();
return 0;
}