Cod sursa(job #2898687)

Utilizator StefanSVStefan S V StefanSV Data 7 mai 2022 11:37:01
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <queue>
#include <iostream>

using namespace std;

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


int n,**mat,inf=2e9,dist[50001],k;
bool viz[50001];
int neviz;

void dfs(int nod)
{
    for(int i=1 ; i<=n ; i++)
    {
        if(mat[nod][i]+dist[nod]<dist[i])
            dist[i]=mat[nod][i]+dist[nod];

    }
}

int main()
{
    int m;
    in>>n>>m;
    mat=new int*[n];
    for(int i=1 ; i<=n ; i++)
    {
        mat[i]=new int[n];
        for(int j=1 ; j<=n ; j++)
            mat[i][j]=inf;
        dist[i]=inf;
    }
    while(m)
    {
        int a,b,c;
        in>>a>>b>>c;
        mat[a][b]=c;
        if(a==1)
            dist[b]=c;
        m--;
    }
    neviz=n-1;
    viz[1]=1;
    while(neviz!=0)
    {
        /*for(int i=1 ; i<=n ; i++)
            cout<<viz[i]<<" ";
        cout<<endl;*/
        int minn=inf,imin;
        for(int i=1 ; i<=n ; i++)
            if(dist[i]<minn && viz[i]==0)
            {
                minn=dist[i];
                imin=i;
            }
            //cout<<imin<<endl;
        dfs(imin);
        viz[imin]=1;
        neviz--;
        //cout<<endl;
    }
    for(int i=2 ; i<=n ; i++)
        out<<dist[i]<<" ";
    return 0;
}