Cod sursa(job #1299939)

Utilizator Vele_GeorgeVele George Vele_George Data 23 decembrie 2014 22:32:08
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf (1<<30)
using namespace std;
int n,m,x,y,c;
ifstream f("dijkstra.in");
ofstream go("dijkstra.out");

struct nod
{
    int b,cost;
}aux;



queue<int> Q;
vector<vector<nod> > G;
vector<int> D;
vector<bool> INQ;

void Dijkstra(int s)
{
    D[s]=0;
    Q.push(s);
    INQ[s]=true;
    while(!Q.empty())
    {
         x=Q.front();
           Q.pop();
        INQ[x]=false;
        for(int i=0; i<G[x].size(); i++)
        {
            y=G[x][i].b;
            c=G[x][i].cost;
            if(D[y]>D[x]+c)
            {
                D[y]=D[x]+c;
                if(!INQ[y])
                {
                    Q.push(y);
                    INQ[y]=true;
                }
            }
        }
    }
}



int main()
{
    f>>n>>m;
    G.resize(n+1);
    for(int i=0; i<=n; i++)
    {
        INQ.push_back(false);
        D.push_back(inf);
    }

    for(int i=0; i<m; i++)
    {
        f>>x>>y>>c;
        aux.b=y;
        aux.cost=c;
        G[x].push_back(aux);
    }
    Dijkstra(1);

    for(int i=2; i<=n; i++)
    {
        go<<D[i]<<" ";
    }

    f.close();
    go.close();



    return 0;
}