Cod sursa(job #2691434)

Utilizator lucaplian432Luca Plian lucaplian432 Data 28 decembrie 2020 17:19:21
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("dijkstra2.in");
ofstream fout("dijkstra.out");
int val[100][100],n,m,distanta[100],v[100],nrsir[100],elpr[100],maxim=0;
int main()
{
    fin>>n>>m;
    int mini=999999999,maxi=0,contor;
    for(int i=1;i<=m;i++)
    {
        int a,b,c;

        fin>>a>>b>>c;
        nrsir[b]=nrsir[a]+1;
        if(maxi<nrsir[b])
        {
            maxi=nrsir[b];
            contor=b;
        }
        if(maxim<b)
          maxim=b;
        if(mini>a)
            mini=a;
        val[a][b]=c;
        val[b][a]=c;
    }
    distanta[mini]=0;
    int el=0;
    for(int i=1;i<=n;i++)
    {
        if(val[mini][i]!=0)
        {
            el++;
            v[el]=i;
            elpr[i]=mini;
            distanta[i]=val[mini][i]+distanta[mini];
        }
    }
    while(el!=0)
    {
        for(int i=1;i<=n;i++)
        {
            if((val[v[1]][i]!=0)&&(distanta[i]==0)&&(mini!=i))
            {

                el++;
                v[el]=i;
                distanta[i]=val[v[1]][i]+distanta[v[1]];
                elpr[i]=v[1];
            }
            else if((val[v[1]][i]!=0)&&(distanta[v[1]]+val[v[1]][i]<distanta[i])&&(mini!=i))
            {
                distanta[i]=val[v[1]][i]+distanta[v[1]];
                elpr[i]=v[1];
            }

        }
        for(int i=1;i<=el-1;i++)
            v[i]=v[i+1];
        el--;
    }
    for(int i=mini+1;i<=maxim;i++)
        fout<<distanta[i]<<" ";
    return 0;
}