Pagini recente » Cod sursa (job #3168457) | Cod sursa (job #518203) | Cod sursa (job #2653112) | Cod sursa (job #465789) | Cod sursa (job #2420602)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int nmax=50005;
const int INF=1<<30;
vector <int> d(nmax,INF);
bool viz[nmax];
int x,y,c;
struct node
{
int nod,cost;
node *urm;
};
node *a[nmax];
void new_node(int x,int y,int cost)
{
node *q=new node;
q->nod=y;
q->cost=cost;
q->urm=a[x];
a[x]=q;
}
int main()
{
int n,m;
fin>>n>>m;
while(fin>>x>>y>>c)
{
new_node(x,y,c);
if(x==1)
d[y]=c;
}
d[1]=0;
viz[1]=1;
bool ok=1;
int poz;
for(; ok; )
{
int pmin=INF;
for(int i=1; i<=n; ++i)
{
if(!viz[i] && d[i]<pmin)
pmin=d[i],poz=i;
}
if(pmin!=INF)
{
viz[poz]=1;
node *q=a[poz];
for(; q!=NULL ; q=q->urm)
{
if( d[q->nod]>d[poz]+q->cost)
d[q->nod]=d[poz]+q->cost;
}
}
else
ok=0;
}
for(int i=2; i<=n; ++i)
if(d[i]!=INF)
fout<<d[i]<<" ";
else
fout<<0<<" ";
}