Cod sursa(job #1489069)

Utilizator tiby10Tibi P tiby10 Data 20 septembrie 2015 15:38:14
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<bits/stdc++.h>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define MAXN 50005
#define INF (int)2e9
typedef pair<int, int> Pair;

struct Edge {
    int vec, cost;
    Edge(int a, int b){
        vec=a, cost=b;
    }
};

vector<Edge> G[MAXN];
int D[MAXN], n;
bool used[MAXN];

void dijkstra(int start) {
    for(int i=0; i<=n; i++) {
        D[i] = INF;
        used[i] = 0;
    }
    D[start] = 0;
    for(int pas=1; pas<=n; pas++) {
      int choose = 0;
      for(int i=1; i<=n; i++)
       if(D[choose] > D[i] && !used[i]){
        choose = i;
        break;
       }

      used[choose] = 1;

      for(auto e : G[choose])
       if(D[e.vec] > D[choose] + e.cost)
        D[e.vec] = D[choose] + e.cost;
        }
}

int main() {
    int a, b, c, m;
    fin>>n>>m;
    while(m--) {
        fin>>a>>b>>c;
        G[a].push_back(Edge(b, c));
    }
    dijkstra(1);
    for(int i=2; i<=n; i++)
        if(D[i] < INF)
            fout<<D[i]<<" ";
        else
            fout<<"0 ";
    return 0;
}