Cod sursa(job #1513849)

Utilizator seba1234Seba Stanici seba1234 Data 30 octombrie 2015 08:30:37
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>

#define NMax 50005

// 100000000
using namespace std;

int D[NMax],N,M;
vector<pair<int,int>> v[NMax];

void Read(){
    ifstream fin("dijkstra.in");
    fin >> N >> M;
    int x,y,z;
    for(int i=0;i<M;i++){
        fin >> x >> y >> z;
        v[x].push_back(make_pair(y,z));
        v[y].push_back(make_pair(x,z));
    }
    for(int i=1;i<=N;i++){
        D[i]=100000000; if(i==1) D[i]=0;
    }
}

void Dijkstra(int s){
    int lmax=100000,y=NMax;
    pair<int,int> p;
    for(int i=0;i<(int)v[s].size();i++)
    {
        p=v[s][i];
        int alt=D[s]+p.second;
        if(alt<D[p.first]){
            D[p.first]=alt;
            if(lmax>alt){
                lmax=alt;
                y=p.first;
            }
        }
    }
    if(y!=NMax) Dijkstra(y);
}

void Print(){
    ofstream fout("dijkstra.out");
    for(int i=2;i<=N;i++){
        //cout << D[i] << ' ';
        fout << D[i] << ' ';
    }
}

int main()
{
    Read();
    //for(int i=1;i<=N;i++){ cout << "Pentru " << i << " : ";
        //for(int j=0;j<(int)v[i].size();j++){
          //  cout << v[i][j].first << '/' << v[i][j].second << ' ';
        //} cout << '\n'; } // muchiile
    Dijkstra(1);
    Print();
}