Pagini recente » Cod sursa (job #3146465) | Cod sursa (job #2507638) | Cod sursa (job #1942442) | Cod sursa (job #1809915) | Cod sursa (job #675882)
Cod sursa(job #675882)
#include <fstream>
#include <iostream>
#include <vector>
#define N 50001
#define INF 0x3f3f3f
using namespace std;
ofstream fout("dijkstra.out");
int T[500001],d[50001],v[500001],n;
struct QQQ{
int vf;
int cost;
QQQ(){
vf=cost=0;
}
QQQ(int i, int c=0){
vf=i;
cost = c;
}
};
vector<QQQ> G[N];
void read(){
ifstream fin("dijkstra.in");
int m;
fin >>n >> m;
for ( ; m ; --m){
int i,j,c;
fin >> i >> j >> c;
G[i].push_back(QQQ(j,c));
}
}
int dijkstra(int start)
{
int i,j,poz,k;
for(int i=1;i<=n;i++)
d[i]=INF;
for(i=0;i<G[start].size();i++)
d[G[start][i].vf]=G[start][i].cost;
v[start]=1;
for(i=1;i<n;i++)
{
int minim=INF;
for(int j=1;j<=n;j++)
if(d[j]<minim&&v[j]==0)
{
minim=d[j];
poz=j;
}
v[poz]=1;
for(k=0;k<G[poz].size();k++)
if(d[G[poz][k].vf]>d[poz]+G[poz][k].cost)
d[G[poz][k].vf]=d[poz]+G[poz][k].cost;
}
return 1;
}
int main(){
read();
dijkstra(1);
for(int i=2;i<=n;i++)
if(d[i]==INF)
fout<<0<<" ";
else
fout<<d[i]<<" ";
return 0;
}