Cod sursa(job #3258222)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 21 noiembrie 2024 16:20:24
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>
#include <vector>
#define NMAX 50002
#define VMAX 2000000002
using namespace std;
ifstream  fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M,viz[NMAX];
vector <int>cost(NMAX,VMAX);
vector<vector<pair<int,int>>> graph(NMAX);

void citire()
{
    int a,b,c;
    fin>>N>>M;

    for(int i=1; i<=M; i++)
    {
        fin>>a>>b>>c;
        graph[a].push_back({b,c});
        graph[b].push_back({a,c});
    }
}

int main()
{
    citire();

    cost[1]=0;
    for(int i=1; i<=N; i++)
    {
        int vmin,nod;
        nod=0;
        vmin=1000000002;

        for(int j=1; j<=N; j++)
        {
            if(!viz[j] && cost[j]<vmin)
            {
                vmin=cost[j];
                nod=j;
            }
        }

        viz[nod]=1;
        for(int j=1; j<=N; j++)
        {
            if(!viz[j])
            {
                for(int k=0; k<graph[nod].size(); k++)
                {
                    if(graph[nod][k].first==j)
                    {
                        if(cost[j]>cost[nod]+graph[nod][k].second)
                        {
                            cost[j]=cost[nod]+graph[nod][k].second;
                        }
                        break;
                    }
                }
            }
        }
    }

    for(int i=2; i<=N; i++)
    {
        if(cost[i]==VMAX)
        {
            cost[i]=0;
        }

        fout<< cost[i] << " ";
    }
    fout<< "\n";

    return 0;
}