Cod sursa(job #804310)

Utilizator Viva12Ferentz Sergiu Viva12 Data 29 octombrie 2012 16:51:28
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <cstdio>
#include <vector>
#include <queue>
#define lim 50001
#define oo ((1<<30)-1)
using namespace std;


int n,m;
FILE *outFile = fopen("dijkstra.out","w");

struct nod
{
    int v;
    int cst;
}Nod;
vector<nod> graph[lim];


int cost[lim];

struct cmp
{
    bool operator()(int a,int b)
    {
        return cost[a] > cost[b];
    }
};
priority_queue<int, vector<int>, cmp> Q;

void citire()
{
    freopen("dijkstra.in","r",stdin);
    scanf("%d %d",&n,&m);

    for(int i =0 ; i <  m; i++)
    {
        int x;
        scanf("%d %d %d",&x,&Nod.v,&Nod.cst);
        graph[x].push_back(Nod);
    }
}

void dijkstra(int start){

    for(int i = 2 ; i <= n; cost[i] = oo, i++);
    Q.push(start);

    while(!Q.empty())
    {
        int min = Q.top();
        Q.pop();

        for(int i = 0 ; i < graph[min].size();i++)
        {
                int sum = cost[min] + graph[min][i].cst;
                if(sum < cost[graph[min][i].v])
                {
                    cost[graph[min][i].v] = sum;
                   Q.push(graph[min][i].v);
                }
        }
    }



}

int main()
{

    citire();
    dijkstra(1);
    for(int i = 2; i <= n; i++)
    {
        if(cost[i] == oo)
        fprintf(outFile,"0 ");
        else
        fprintf(outFile,"%d ", cost[i]);
    }
    return 0;
}