Cod sursa(job #1942170)

Utilizator bobotheslayerBogdan Zaharia bobotheslayer Data 27 martie 2017 20:40:57
Problema Sate Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define MAX_N 30005
using namespace std;
int n,m,x,y,c,a,b,d[MAX_N];
struct muchie
{
    int vecin,cost;
};
vector<muchie> v[MAX_N];
queue<int> coada;

int main()
{
    FILE *intrare,*iesire;
    int i,nod;
    muchie t,tt;
    intrare=fopen("sate.in","r");
    iesire=fopen("sate.out","w");
    fscanf(intrare,"%d%d%d%d",&n,&m,&x,&y);
    for (i=0; i<=m-1; ++i)
    {
        fscanf(intrare,"%d%d%d",&a,&b,&c);
        t.vecin=b;
        t.cost=c;
        tt.vecin=a;
        tt.cost=c;
        v[a].push_back(t);
        v[b].push_back(tt);
    }

    for (i=1; i<=n; ++i)
        d[i]=-1;

    coada.push(x);
    d[x]=0;

    while (!coada.empty())
    {
        nod=coada.front();
        //printf("%d ",nod);
        for (i=0; i<v[nod].size(); ++i)
        {
            muchie m;
            m=v[nod][i];
            if (d[m.vecin]==-1 || d[nod]+m.cost<d[m.vecin] )
            {
                d[m.vecin]=d[nod]+m.cost;
                coada.push(m.vecin);
            }
        }
        coada.pop();
    }
    for (i=1; i<=n; ++i)
    fprintf(iesire,"%d ",d[i]);
    printf("%d ",d[y]);
}