Cod sursa(job #2075906)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 25 noiembrie 2017 20:28:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda dopaj_maxim Marime 1.06 kb
#include <bits/stdc++.h>

#define MaxN 100005
#define INF 2140000000
#define MOD 1000000007

using namespace std;

FILE*IN,*OUT;

int d[MaxN],N,M,X,Y,S;
bool IQ[MaxN];
vector<int>Graph[MaxN];

void BFS(int node)
{
    queue<int>Q;
    Q.push(node);
    for(int i=1;i<=N;i++)
        d[i]=INF;
    d[node]=0;
    while(!Q.empty())
    {
        node=Q.front();
        Q.pop();
        for(int i=0;i<Graph[node].size();i++)
            if(d[Graph[node][i]]>d[node]+1)
            {
                d[Graph[node][i]]=d[node]+1;
                if(!IQ[Graph[node][i]])
                    IQ[Graph[node][i]]=1,Q.push(Graph[node][i]);
            }
    }
}

int main()
{
    IN=fopen("bfs.in","r");
    OUT=fopen("bfs.out","w");

    fscanf(IN,"%d%d%d",&N,&M,&S);

    for(int i=1;i<=M;i++)
    {
        fscanf(IN,"%d%d",&X,&Y);
        Graph[X].push_back(Y);
    }

    BFS(S);

    for(int i=1;i<=N;i++)
    {
        if(d[i]==INF)
            fprintf(OUT,"-1 ");
        else fprintf(OUT,"%d ",d[i]);
    }

    return 0;
}