Cod sursa(job #774483)

Utilizator luckyme91wiz kid luckyme91 Data 5 august 2012 00:41:08
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>
#include <map>
#include <vector>
#include <queue>

using namespace std;
#define INF 1000000000

vector < pair<int, int> > noduri[50005];
int d[50005];
bool inq[50005];
queue<int> Q;

 void solve () {
     Q.push(0);
     inq[0] = true;
     d[0] = 0;
     while (!Q.empty())
     {
         int i = Q.front();
         Q.pop();
         inq[i] = false;
         for (vector< pair<int, int> >::iterator it = noduri[i].begin(); it != noduri[i].end(); it++) {
            if (it->second + d[i] < d[it->first])
            {
               d[it->first] = it->second + d[i];
               if (!inq[it->first])
               {
                   Q.push(it->first);
                   inq[it->first] = true;
               }
            }
         }
       }
     }
 
             

int main () {
    freopen ("dijkstra.in", "r", stdin);
    freopen ("dijkstra.out", "w", stdout);

    int n, m, x, y, z;
    scanf ("%d %d", &n, &m);
    for (int i = 0; i < m; i++)
    {
        scanf ("%d %d %d", &x, &y, &z);
        noduri[x - 1].push_back (make_pair (y - 1, z));
    }
    for (int i = 0; i < n; i++)
    {
        inq[i] = false;
        d[i] = INF;
    }
    solve();
    for (int i = 1; i < n; i++)
    {
        if (d[i] == INF)
            printf("0 ");
        else
            printf ("%d ", d[i]);
    }
    return 0;
}