Cod sursa(job #2201597)

Utilizator godslingerCastor Alvin godslinger Data 5 mai 2018 11:15:50
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <utility>
#include <set>
#include <iterator>
#include <queue>
#include <algorithm>
using namespace std;

int s=0,n,m;
int muchii [250002][3];
int tati[50002], d[50002], v[50002];

void citire() {
    ifstream fin("dijkstra.in");
    fin>>n>>m;
    for (int i=0; i<m; i++) {
        int t1, t2, c;
        fin>>t1>>t2>>c;
        t1--;
        t2--;
        muchii[i][0]=t1;
        muchii[i][1]=t2;
        muchii[i][2]=c;
        //muchii[t2].push_back(make_pair(t1,c)); //daca graful e neorientat
    }
}

void bellman_ford () {
    for (int i=1; i<n; i++) {
        d[i]=1000000000;
    }
    d[s]=0;
    tati[s]=s;
    int k=0;
    while (k<n) {
        for (int i=0; i<m; i++) {
            int f=muchii[i][0], s=muchii[i][1], c=muchii[i][2];
            if (d[s]>d[f]+c) {
                d[s]=d[f]+c;
                tati[s]=f;
            }
        }
        k++;
    }

}

int main()
{
    citire();
    for (int i=0; i<m; i++) {
        cout<<muchii[i][0]+1<<" "<<muchii[i][1]+1<<" "<<muchii[i][2]<<endl;
    }
    cout<<endl<<endl;
    //djkistra();
    cout<<endl<<endl;
    //cout<<"Sursa: "<<s+1<<endl;
    bellman_ford();
    ofstream fout("dijkstra.out");
    for (int i=1; i<n; i++) {
        if (d[i]==1000000000) {d[i]=0;}
        cout<<"Nodul "<<i+1<<" cu tatal "<<tati[i]+1<<" si distanta "<<d[i]<<endl;
        fout<<d[i]<<" ";
    }
    return 0;
}