Cod sursa(job #866977)

Utilizator test9cosmin Macovei test9 Data 28 ianuarie 2013 22:22:38
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
#define mm 50001
const int INF = 0x3f3f3f3f;
int Dmin[mm],viz[mm], N, M, x, y, cost, k;
queue<int> Q;
vector<pair<int, int> > lista[mm];
vector<pair<int, int> >::iterator it;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int main() {
	f>>N>>M;
    for (int i = 1; i <= M; i++) {
        f>>x>>y>>cost;
        lista[x].push_back(pair<int, int>(y, cost));
    }
    memset(Dmin, INF, sizeof(Dmin));
    memset(viz, false, sizeof(viz));
    Dmin[1] = 0;
    Q.push(1);
    viz[1] = true;
    while (Q.size() > 0) {
        k = Q.front();
        Q.pop();
        viz[k] = false;
        for (it = lista[k].begin(); it != lista[k].end(); it++) 
            if (Dmin[it->first] > Dmin[k] + it->second) {
                Dmin[it->first] = Dmin[k] + it->second;
                if (!viz[it->first]) {
                    Q.push(it->first);
                    viz[it->first] = true;
                }
            }
    }
    for (int i = 2; i <= N; i++) 
        g<<(Dmin[i] < INF ? Dmin[i] : 0)<<' ';
	g<<'\n';
	g.close();
    return 0;
}