Cod sursa(job #1373831)

Utilizator balanpaulbalan paul balanpaul Data 4 martie 2015 20:50:38
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include<cstdio>

using namespace std;

typedef struct Nod
{
    int cost, nod1;
    Nod *urm;
} NOD;
NOD *v[1002], *q, *p;
int viz[1002];
long long nr[1002];
int n, m, d[1002],perm[1000];
int i,j,x,y,dmin,nod0,x0,y0,c,k;
void dijkstra(int x0, int y0)
{
    for (j=1; j<n; ++j)
    {
        dmin=1000000; //infinit=cost unei muchii * nr noduri
        for (i=1; i<=n; ++i)
        {
            if (viz[i]==0 && dmin>d[i])
            {
                dmin=d[i];
                nod0=i;
            }
        }

        viz[nod0]=1;
        p=v[nod0];

        while (p->urm != NULL)
        {
            if (d[p->nod1]>dmin+p->cost)
                d[p->nod1]=dmin+p->cost;
            p=p->urm;

        }
    }

}
int main()
{

    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    scanf("%d %d  ", &n, &m );


    //initializari
    for (i=1; i<=n; ++i)
    {
        d[i]=1000000;
        v[i]=new NOD;
        v[i]->nod1=1001;
        v[i]->cost=1000000;
        v[i]->urm=NULL;
    }

    for (i=1; i<=m; ++i)
    {
        scanf("%d %d %d", &x, &y, &c);

        q=new NOD;
        q->nod1=y;
        q->cost=c;
        q->urm=v[x];
        v[x]=q;

        q=new NOD;
        q->nod1=x;
        q->cost=c;
        q->urm=v[y];
        v[y]=q;
    }

    p=v[1];
    while (p->urm != NULL)
    {
        nod0=p->nod1;
        d[nod0]=p->cost;
        // printf("%d %d\n",p->nod1,p->cost);

        p=p->urm;
    }


    for(i=1; i<=n; ++i)
        dijkstra(1,i);
    for(i=2; i<=n; ++i)  printf("%d ", d[i]);

    return 0;
}