Cod sursa(job #145747)

Utilizator igorPirnau Igor igor Data 29 februarie 2008 12:39:04
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream.h>

#define nmax 50100
#define mmax 251000
#define inf 10000000

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

int a[mmax], st[mmax], viz[nmax], dis[nmax], n, m, i, j, cost[mmax], prim, x, y, sum, c, min;   

int main()
{
    f>>n>>m;
    for(i=1; i<=m; i++){
        f>>x>>y>>c;
        st[x]++; st[y]++;
    }
    f.close();    

    sum=0;
    for(i=1; i<=n+2; i++){
        st[i-1]=sum;
        sum=sum+st[i];
    }

    ifstream f("dijkstra.in");
    f>>n>>m;
    for(i=1; i<=m; i++){
        f>>x>>y>>c;
        a[st[x]]=y;
        cost[st[x]]=c;
        cost[st[y]]=c;
        a[st[y]]=x;
        st[x]--; st[y]--;
    }
    f.close();

    for(i=1; i<=n; i++) dis[i]=inf;    
    dis[1]=0;
    prim=1;
    
    for(i=1; i<=n; i++){
        for(j=st[prim]+1; j<=st[prim+1]; j++) if( dis[prim]+cost[j] < dis[a[j]] ) dis[a[j]]=dis[prim]+cost[j];
        viz[prim]=1;
        min=inf;
        for(j=1; j<=n; j++) if( dis[j]<min && !viz[j] ){ min=dis[j]; prim=j; }
    }

    for(i=1; i<=n; i++) g<<dis[i]<<' ';
    g.close();
    return 0;
}