Cod sursa(job #356462)

Utilizator csizMocanu Calin csiz Data 14 octombrie 2009 20:36:02
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>
#include <limits>
#include <iostream>

using namespace std;



int main(){
    ifstream in("dijkstra.in");
    ofstream out("dijkstra.out");

    int n,m;in>>n>>m;
    vector<vector<pair<int,int> > > v(n,vector<pair<int,int> >());
    vector<int> cost(n+1,numeric_limits<int>::max());
    vector<bool> nevizitat(n,true);

    for(int i=0;i<m;i++){
        int x,y,c;
        in>>x>>y>>c;
        v[x-1].push_back(pair<int,int>(y-1,c));
        v[y-1].push_back(pair<int,int>(x-1,c));

    }

    cost[0]=0;
    bool one_more=true;
    while(one_more){
        one_more=false;
        int min=n;
        for(int i=0;i<n;i++){
            if(nevizitat[i]){
                one_more=true;
                if(cost[i]<cost[min]) min=i;
            }
        }
        if(min!=n){
            for(int i=0;i<v[min].size();i++){
                if(nevizitat[v[min][i].first]){
                    cost[v[min][i].first]=std::min(cost[v[min][i].first],cost[min]+v[min][i].second);
                }
            }
            nevizitat[min]=false;
        }
    }
    for(int i=1;i<n;i++){
        if(cost[i]==numeric_limits<int>::max()) cout<<"0 ";
        else out<<cost[i]<<" ";
    }
}