Cod sursa(job #1072354)

Utilizator dumytruKana Banana dumytru Data 4 ianuarie 2014 13:04:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

int n,m,st;
vector<vector<int> > graf;
vector<int> is_visited, solutie;
queue<int> q;
void BFS()
{
    int currentNode,i,len;
    q.push(st);
    is_visited[st]=1;
    solutie[st]=0;
    while(!q.empty())
    {
        currentNode = q.front();q.pop();
        len = graf[currentNode].size();
        for(i=0;i<len;i++)
        {
            if(is_visited[graf[currentNode][i]]==0)
            {
                q.push(graf[currentNode][i]);
                is_visited[graf[currentNode][i]]=1;
                solutie[graf[currentNode][i]] = solutie[currentNode]+1;
            }
        }
    }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    int i,u,v;
    scanf("%u %u %u",&n,&m,&st);
    graf.resize(n+1);is_visited.resize(n+1);solutie.resize(n+1);
    for(i=1;i<=m;i++)
    {
        scanf("%u %u",&u,&v);
        graf[u].push_back(v);
    }
    BFS();
    for(i=1;i<=n;i++)if(i!=st && solutie[i]==0)printf("-1 "); else printf("%u ",solutie[i]);
    return 0;
}