Cod sursa(job #543874)

Utilizator alexandru93moraru alexandru sebastian alexandru93 Data 28 februarie 2011 17:59:44
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <stdio.h> 
#include <vector> 
 
 
using namespace std; 
 
 
#define maxn 100010 
 
 
int N, M, L, Start; 
vector <int> A[maxn]; 
int G[maxn], S[maxn], Cost[maxn]; 
 
 
void BFS(int nod)
{ 
   
int i, j; 
 
 
   
memset(Cost, -1, sizeof(Cost));  // Marchez toate nodurile ca fiind nevizitate  
     
//  Introduc nodul de start in coada 
    
L = 1; 
    
Cost[nod] = 0; 
   
S[L] = nod; 

 
    
for (i = 1; i <= L; i++) //  Elimin pe rand nodurile din coada         
for (j = 0; j < G[S[i]]; j++)    //  Parcurg vecinii nodului ce urmeaza sa fie eliminat            
if (Cost[A[S[i]][j]] == -1)         
{                 
//  Adaug vecinii nevizitati in coada si le calculez distanta                 
S[++L] = A[S[i]][j];                 
Cost[S[L]] = Cost[S[i]] + 1;             
} 
}    
 
 
int main() 
{     
freopen("bfs.in", "r", stdin);     
freopen("bfs.out", "w", stdout);  
   
int i, x, y;  
    
scanf("%d %d %d ", &N, &M, &Start);  
    
//  Citesc arcele si retin graful sub forma de lista de vecini 
 
 
    
for (i = 1; i <= M; i++)  
    
{         
scanf("%d %d ", &x, &y);         
A[x].push_back(y);     
}  
     
for (i = 1; i <= N; i++)          
G[i] = A[i].size();  
     
BFS(Start);  
   
for (i = 1; i <= N; i++)  
printf("%d ", Cost[i]); 
printf("\n");  
    
return 0; 
}