Cod sursa(job #880040)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 16 februarie 2013 10:44:10
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#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]<<" ";
}