Cod sursa(job #1892850)

Utilizator george777george rosescu george777 Data 25 februarie 2017 12:23:53
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#define infinit 999999
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int viz[50100],d[50100],tata[50100],n,m,xo;
long mat[5100][5100];
void dijkstra(int xo)
{
    int i,min,k,ok;
    for(i=1;i<=n;i++)
    {
        d[i]=mat[xo][i];
        tata[i]=xo;
    }
    tata[xo]=0;
    viz[xo]=1;
    ok=1;
    while(ok)
    {
        min=infinit;
        for(i=1;i<=n;i++)
            if(!viz[i]&&min>d[i])
            {
                min=d[i];
                k=i;
            }
        if(min!=infinit)
        {
            viz[k]=1;
            
            for(i=1;i<=n;i++)
                if(!viz[i]&&d[i]>d[k]+mat[k][i])
                {
                    d[i]=d[k]+mat[k][i];
                    tata[i]=k;
                }
        }
        else
            ok=0;
    }
    
}
int main()
{
    int i,j,a,b,c;
    f>>n>>m;
    xo=1;
    d[xo]=0;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            mat[i][j]=infinit;
    for(i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        mat[a][b]=c;
        mat[b][a]=c;
    }
    dijkstra(xo);
    for(i=1;i<=n-1;i++)
            g<<d[i+1]<<" ";
    return 0;
}