Pagini recente » Cod sursa (job #3031232) | Cod sursa (job #2425717) | Cod sursa (job #1909517) | Cod sursa (job #2314125) | Cod sursa (job #878385)
Cod sursa(job #878385)
#include <fstream>
#include <limits.h>
using namespace std;
const int y=INT_MAX/2;
struct nod{
int info;
int cost;
nod *next;
}*prim[50001],*p,*aux;
int v[50001], t[50001], d[50001];
int main()
{
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
int n,m;
in>>n>>m;
int a, b, c, i, j, k;
for (i=1; i<=m; i++)
{
in>>a>>b>>c;
aux=new nod;
aux->info=a;
aux->next=prim[b];
aux->cost=c;
prim[b]=aux;
aux=new nod;
aux->info=b;
aux->next=prim[a];
aux->cost=c;
prim[a]=aux;
}
int x;
x=1;
v[x]=1;
for (i=1; i<=n; i++)
t[i]=x;
t[x]=0;
for (i=1;i<=n;i++)
d[i]=y;
d[x]=0;
for (p=prim[x]; p; p=p->next)
d[p->info]=p->cost;
int minim=y;
for (i=1; i<n; i++)
{
k=0;
minim=y;
for (j=2;j<=n;j++)
if (v[j]==0&&minim>d[j])
minim=d[j],k=j;
v[k]=1;
for (p=prim[k]; p; p=p->next)
if (!v[p->info]&&d[k]+p->cost<d[p->info])
{
d[p->info]=d[k]+p->cost;
t[p->info]=k;
}
if (!k)break;
}
for (i=2; i<=n; i++)
out<<d[i]<<" ";
return 0;
}