Cod sursa(job #1521574)

Utilizator iulian_f2kGuraliuc Iulian iulian_f2k Data 10 noiembrie 2015 17:51:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#define nmax 101
#define Inf 1000000000
using namespace std;

int A[nmax][nmax],n,m,x,s[nmax],d[nmax],t[nmax];

void initializare()
{
    int x1,y1,i,j,c;
    cin>>n>>x;

    for(i=1; i<=n; i++)
    {
        for(j=i+1; j<=n; j++)
            A[i][j]=A[j][i]=Inf;

    }

    while(cin>>x1>>y1>>c)
    {
        A[x1][y1]=c;
    }

    for(i=1; i<=n; i++)
    {
        d[i]=A[x][i];
        if(A[x][i]<Inf)//
            t[i]=x;
    }

}


void drum(int y)//afisare drum
{
    if(t[y]!=0)
    {
        drum(t[y]);
        cout<<t[y]<<' ';
    }
}

int main()
{
    freopen("dijkstra.in","rt",stdin);
    freopen("dijkstra.out","wt",stdout);
    int nr,dmin,im;

    int i;
    initializare();
    s[x]=1;
    nr=1;
    do
    {
        dmin=Inf;
        for(i=1; i<=n; i++)
            if(!s[i] && d[i]<dmin)
            {
                im=i;
                dmin=d[i];
            }
        if(dmin<Inf)
        {
            nr++;
            s[im]=1;
            for(i=1; i<=n; i++)
                if(!s[i] && d[i]>d[im]+A[im][i])
                {
                    d[i]=d[im]+A[im][i];
                    t[i]=im;
                }
        }
    }
    while(!(dmin==Inf || nr==n));

    for(i=1; i<=n; i++)
        if(d[i]==Inf)
            cout<<-1<<' ';
        else
            cout<<d[i]<<' ';
    cout<<'\n';
    return 0;
}