Cod sursa(job #735191)

Utilizator visanrVisan Radu visanr Data 15 aprilie 2012 20:30:33
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
using namespace std;

struct edge
{
       long start,end;
};

vector <edge> v;
vector <long> cost(100001);
vector <long> used(100001);
long n,m,st,x,y;


void read_input()
{
     scanf("%ld %ld %ld", &n,&m,&st);
     for(int i=0;i<m;i++)
     {
                     scanf("%ld %ld", &x,&y);
                     edge New;
                     New.start=x;
                     New.end=y;
                     v.push_back(New);
     }
}


void BFS(long st)
{
     used[st]=1;
     for(int i=0;i<100001;i++) cost[i]=100000;
     cost[st]=0;
     queue <int> q;
     q.push(st);
     while(!q.empty())
     {
                      int old=q.front();
                      q.pop();
                      for(int i=0;i<m;i++)
                      {
                              if(v[i].start==old && used[v[i].end]==0)
                              {
                                                     q.push(v[i].end);
                                                     cost[v[i].end]=cost[v[i].start]+1;
                                                     used[v[i].end]=1;
                              }
                      }
     }
     for(int i=1;i<=n;i++) if(cost[i]==100000) printf("-1 "); else printf("%ld ", cost[i]);
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    read_input();
    BFS(st);
    return 0;
}