Cod sursa(job #735210)

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


struct edge
{
       vector<long> neighbour;
};
edge nodes[100001];

long *cost;
long n,m,st,a,b;

void read_input()
{
     scanf("%ld %ld %ld", &n,&m,&st);
     for(int i=0;i<m;i++)
     {
                     scanf("%ld %ld", &a,&b);
                     nodes[a].neighbour.push_back(b);
     }
    /* for(int i=1;i<=n;i++)
     {
                      for(int j=0;j<nodes[i].neighbour.size();j++) printf("%ld ", nodes[i].neighbour[j]);
                      /printf("\n");
     }*/
}


void BFS(long st)
{
     //printf("bfs\n");
     cost=(long *)calloc((n+1),sizeof(long));
     for(int i=1;i<=n;i++) cost[i]=-1;
     cost[st]=0;
     queue <long> q;
     q.push(st);
     while(!q.empty())
     {
                      long old=q.front();
                      q.pop();
                    //  printf("old=%ld\n", old);
                      for(int i=0;i<nodes[old].neighbour.size();i++)
                      {
                              if(cost[nodes[old].neighbour[i]]==-1)
                              {
                                                     q.push(nodes[old].neighbour[i]);
                                                     cost[nodes[old].neighbour[i]]=cost[old]+1;
                              }
                      }
     }
     for(int i=1;i<=n;i++) printf("%ld ", cost[i]);
    // printf("bfs\n");
}

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