Pagini recente » Cod sursa (job #840745) | Cod sursa (job #2199741) | Cod sursa (job #598320) | Cod sursa (job #738775) | Cod sursa (job #505869)
Cod sursa(job #505869)
#include <iostream>
#include <fstream>
#define L 50001
#define oo 0x3f3f3f
using namespace std;
int n,m, lg[L],viz[L];
struct nod{
int inf,cost;
nod *urm;
};
nod *g[L];
void add(int x,int y,int z)
{
nod *aux = new nod;
aux->inf=y;
aux->cost=z;
aux->urm=g[x];
g[x]=aux;
}
void citire()
{
ifstream f("dijkstra.in");
f>>n>>m;
int x,y,z;
for(int i=0;i<m;i++)
{
f>>x>>y>>z;
add(x,y,z);
}
}
void Dijkstra()
{
for(int i=1;i<=n;i++) lg[i]=oo;
lg[1]=0;
// for(int k=1;k<=n;k++)
for(nod *p=g[1];p;p=p->urm )
lg[p->inf]=p->cost;
for(int i=1;i<n;i++)
{
int nodmin,cmin=oo;
for(int k=1;k<=n;k++)
if(!viz[k] && cmin>lg[k])
cmin=lg[k],nodmin=k ;
if(cmin!=oo)
{
viz[nodmin]=1;
for(nod *p=g[nodmin];p;p=p->urm)
if(!viz[p->inf] && lg[p->inf]>cmin+p->cost)
lg[p->inf]=lg[nodmin]+p->cost;
}
}
}
int main()
{
ofstream g("dijkstra.out");
citire();
Dijkstra();
for(int i=2;i<=n;i++)
g<<lg[i]<<" ";
return 0;
}