Cod sursa(job #3214253)

Utilizator Iustin2812Ion Iustin Ciprian Iustin2812 Data 13 martie 2024 22:48:31
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>

using namespace std;

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

vector < pair<int , int> > l[1000001];
queue <int> q;
int n;
int viz[100001],cost[100001]={0};

void dijkstra(){
    q.push(1);
    viz[q.front()]=1;
    while(!q.empty()){
        int a=q.front();
        q.pop();
        for(int i=0;i<l[a].size();i++){
            
            if(viz[l[a][i].first]==0){
                cost[l[a][i].first]=cost[a]+l[a][i].second;
                viz[l[a][i].first]=1;
                q.push(l[a][i].first);
            }
                
            else
                if(viz[l[a][i].first]==1&&cost[l[a][i].first]>cost[a]+l[a][i].second)
                    cost[l[a][i].first]=cost[a]+l[a][i].second;

            
               
            /*if(viz[l[a][i].first]==0||cost[l[a][i-1].first]+l[a][i].second<cost[l[a][i].first]){
                cost[l[a][i].first]=cost[l[a][i-1].first]+l[a][i].second;
                q.push(l[a][i].first);
                viz[q.front()]=1;
            }*/
                
        }
    }
    
}

int main() {
    int m;
    fin>>n>>m;
    int x,y,z;
    for(int i=1;i<=m;i++){
        fin>>x>>y>>z;
        l[x].push_back({y,z});
        l[y].push_back({x,z});

    }
    dijkstra();
    for(int i=2;i<=n;i++){
        fout<<cost[i]<<" ";
    }
    return 0;
}