Cod sursa(job #2243553)

Utilizator mihnea_toaderToader Mihnea mihnea_toader Data 20 septembrie 2018 20:25:26
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <limits.h>

using namespace std;

int a[5000][5000], n, m, viz[100], dis[100], start, finish;

bool verif ()
{
    for (int i=1;i<=n;i++)
        if (viz[i]==0)
            return 0;
    for (int i=1;i<=n;i++)
        if (viz[i]==0&&dis[i]<INT_MAX)
            return 0;
    return 1;
}

int main()
{
    int nodcrt;
    ifstream fin ("dijkstra.in");
    ofstream fout ("dijkstra.out");
    fin>>n>>m;
    for (int i=0;i<m;i++)
    {
        int x,y,cost;
        fin>>x>>y>>cost;
        a[x][y]=cost;
        a[y][x]=cost;
    }
    nodcrt=1;
    for (int i=1;i<=n;i++)
    {
        dis[i]=INT_MAX;
    }
    dis[nodcrt]=0;
    while(verif()==0)
    {
        for (int j=1;j<=n;j++)
            if (a[nodcrt][j]&&viz[j]==0&&dis[j]>dis[nodcrt]+a[nodcrt][j])
                {
                    dis[j]=dis[nodcrt]+a[nodcrt][j];
                }
        viz[nodcrt]=1;
        int minim=INT_MAX;
        for (int i=1;i<=n;i++)
            if (viz[i]==0&&dis[i]<minim)
        {
            minim=dis[i];
            nodcrt=i;
        }
    }
    for (int i=2;i<=n;i++)
        fout<<dis[i]<<" ";
    return 0;
}