Cod sursa(job #1111344)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 18 februarie 2014 20:07:37
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
#define inf 2000000000
queue <int> q;
vector <pair<int,int> > muchii[50005];
bool inq[50005];
int dmin[50005];
int n,m,i,a,b,c,now,to,dto;
int main(void)
{
    FILE * f;
    f=fopen("djikstra.in","r");
    ofstream g("djikstra.out");
    fscanf(f,"%d%d",&n,&m);
    for (i=1;i<=m;i++)
    {
        fscanf(f,"%d%d%d",&a,&b,&c);
        muchii[a].push_back(make_pair(b,c));
    }
    for (i=1;i<=50002;i++)
    {
        dmin[i]=inf;
        inq[i]=false;
    }
    dmin[1]=0;
    q.push(1);
    while (!q.empty())
    {
        now=q.front();
        inq[now]=false;
        for (i=0;i<muchii[now].size();i++)
        {
            to=muchii[now][i].first;
            dto=muchii[now][i].second;
            if (dmin[now]+dto<dmin[to])
            {
                dmin[to]=dmin[now]+dto;
                if (!inq[to])
                {
                    q.push(to);
                    inq[to]=true;
                }
            }
        }
        q.pop();
    }
    for (i=2;i<=n;i++)
        if (dmin[i]!=inf)
            g<<dmin[i]<<' ';
        else
            g<<"0 ";
    g.close();
    return 0;
}