Cod sursa(job #1424605)

Utilizator sandugavrilaGavrila Alexandru sandugavrila Data 25 aprilie 2015 00:35:12
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <climits>
using namespace std;
int v[5005][5005],d[5005],viz[5005],t[5005];
int n;
void set()
{
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i!=j)
                v[i][j]=INT_MAX;
            else
                v[i][j]=0;
}
int main()
{
    freopen("date.in","r",stdin);
    freopen("date.out","w",stdout);

    int i,j,a,b,c,m;
    scanf("%d%d",&n,&m);
    set();
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        v[a][b]=c;
    }
    for(i=1;i<=n;i++)
        d[i]=v[1][i];
    viz[1]=1;
    for(i=2;i<=n;i++)
        if(v[1][i]!=INT_MAX)
            t[i]=1;
    for(j=1;j<n;j++)
    {
        int min=INT_MAX,poz=-1;
        for(i=2;i<=n;i++)
            if(d[i]<min&&!viz[i])
            {
                min=d[i];
                poz=i;
            }
        viz[poz]=1;
        for(i=2;i<=n;i++)
            if(d[poz]!=INT_MAX&&v[poz][i]!=INT_MAX)
                if(d[i]>d[poz]+v[poz][i])
                {
                    t[i]=poz;
                    d[i]=d[poz]+v[poz][i];
                }
    }
    for(i=2;i<=n;i++)
        printf("%d ",d[i]);


    return 0;
}