Pagini recente » Cod sursa (job #2023888) | Cod sursa (job #2634868) | Monitorul de evaluare | Cod sursa (job #2842336) | Cod sursa (job #880040)
Cod sursa(job #880040)
#include <fstream>
#define inf 50000001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout ("dijkstra.out");
struct node
{
int nr,dist;
node *next;
} *v[50001];
int d[50001],n,m; bool vis[50001];
void build_graph ()
{
int a,b,di;
node *d;
fin>>a>>b>>di;
d=new node;
d->nr=b;
d->dist=di;
d->next=v[a];
v[a]=d;
}
void dijkstra ()
{
int i,j,current,mind=0,s; node *p;
for (i=1;i<=n;i++) d[i]=inf;
d[1]=0; current=1;
for (i=1;i<=n;i++)
{
p=v[current];
while (p!=NULL)
{
s=d[current]+p->dist;
if (vis[p->nr]==0&&s<d[p->nr]) d[p->nr]=s;
p=p->next;
}
vis[current]=1;
mind=inf;
for (j=2;j<=n;j++) if (!vis[j]) if(d[j]<mind) {mind=d[j]; current=j;}
}
}
int main()
{
int i;
fin>>n>>m;
for (i=1;i<=m;i++) build_graph ();
dijkstra ();
for (i=2;i<=n;i++) if (d[i]==inf) d[i]=0;
for (i=2;i<=n;i++) fout<<d[i]<<" ";
}