Cod sursa(job #878387)

Utilizator DanFodorFODOR Dan Horatiu DanFodor Data 14 februarie 2013 13:57:42
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <limits.h>

using namespace std;

const int y=INT_MAX/2;

struct nod{
    int info;
    int cost;
    nod *next;
    }*prim[50021],*p,*aux;

int v[50021], t[50021], d[50021];

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;
}