Cod sursa(job #1331019)

Utilizator kneillNegus Sebastian kneill Data 31 ianuarie 2015 11:23:36
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#define inf 1<<15-1

using namespace std;

int i,m,n,pred[250001],viz[250001],d[250001],k,mini,a,b,c,j;
long long x[2501][2501];

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

int minim (int &k)
{
    int i,m=inf*2;
    for(i=1;i<=n;i++)
    {
        if(viz[i]==0 && d[i]<m)
        {
            m=d[i];
            k=i;
        }
    }
    return m;
}

void dijkstra()
{
    int nr=1,ok=1,k=2;
    while(nr<n && ok==1)
    {
        mini=minim(k);
        if(mini<inf)
        {
            viz[k]=1;nr++;
            for(i=1;i<=n;i++)
                if(viz[i]==0 && d[k]+x[k][i]<d[i])
            {
                d[i]=d[k]+x[k][i];
                pred[i]=k;
            }
        }
        else ok=0;
    }
}

int main()
{
   f>>n>>m;
   for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    if(i==j)
    x[i][j]=0;
   else
    x[i][j]=inf;
   for(i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        x[a][b]=c;
        x[b][a]=c;
    }
    d[1]=0;
    pred[1]=0;
    viz[1]=1;
    for(i=2;i<=n;i++)
        if(x[1][i]!=0)
    {
        d[i]=x[1][i];pred[i]=1;
    }
        else
            d[i]=inf;

        dijkstra();
        for(i=2;i<=n;i++)
            g<<d[i]<<" ";
    return 0;
}