Cod sursa(job #1916523)

Utilizator tuddor1234Turdasan Tudor tuddor1234 Data 9 martie 2017 09:41:08
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#define INF 100000000
using namespace std;

ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");

int graf[104][104],tati[104],dist[104],viz[104];
int n,p,i,j,x,y,c;

void afis()
{
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++) cout<<graf[i][j]<<" ";
        cout<<endl;
    }
}

void dk(int x)
{
    int k;

    viz[x]=1;
    for(int i=1;i<=n;i++)
    {
        dist[i]=graf[x][i];
        tati[i]=x;
    }
    tati[x]=0;
    int mi;
    bool ok=true;
    while(ok)
    {
        mi=INF;
        for(int i=1;i<=n;i++)
        {
            if(viz[i]==0 && dist[i]<mi) {mi=dist[i];k=i;}
        }

        if(mi==INF)ok=false;
        else
        {
            viz[k]=1;
                for(int i=1;i<=n;i++)
                {
                    if(viz[i]==0 && dist[k]+graf[k][i]<dist[i]) {dist[i]=dist[k]+graf[k][i],tati[i]=k;}
                }
        }


    }


}

int main()
{
    fin>>n>>p;
    for(i=1;i<=n;i++)
    {
        graf[i][i]=0;
        for(j=1;j<=n;j++)if(i!=j)graf[i][j]=INF;
    }
    while(fin>>x>>y>>c) {graf[x][y]=c;}
    dk(p);
    for(i=1;i<=n;i++)
    {
        if(dist[i]==INF) fout<<-1<<" ";
        else fout<<dist[i]<<" ";
    }
    return 0;
}