Cod sursa(job #2243552)

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

using namespace std;

int a[100][100], b[100][100], 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];
                    if (j==5)
                        cout<<dis[nodcrt]<<" "<<a[nodcrt][j]<<"\n";
                }
        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=1;i<=n;i++)
        //    cout<<dis[i]<<" ";
        //cout<<"\n";
    }
    for (int i=2;i<=n;i++)
        fout<<dis[i]<<" ";
    return 0;
}