Pagini recente » Cod sursa (job #490430) | Cod sursa (job #641873) | Cod sursa (job #1919716) | Cod sursa (job #2615707) | Cod sursa (job #2252682)
#include<bits/stdc++.h>
using namespace std;
const int N_MAX = 100005;
vector <int> G[N_MAX];
int distance_arr[N_MAX], currentDistance = 1;
bool visited[N_MAX];
void bfs(int N, int M, int startVertex)
{
queue <int> bfsQueue;
int visCount = 0;
distance_arr[startVertex] = 0;
visited[startVertex] = true;
bfsQueue.push(startVertex);
while(!bfsQueue.empty())
{
bool at_least_one_visited = false;
int currentNode = bfsQueue.front();
bfsQueue.pop();
for(int i = 0; i < G[currentNode].size(); i ++)
if( !visited[G[currentNode][i]] )
{
visited[G[currentNode][i]] = true;
bfsQueue.push(G[currentNode][i]);
if( G[currentNode][i] != startVertex ){
distance_arr[G[currentNode][i]] = currentDistance;
at_least_one_visited = true;
}
}
if( at_least_one_visited == true ){
currentDistance ++;
at_least_one_visited = false;
}
visCount ++;
}
}
int main()
{
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int N, M, startVertex;
fin >> N >> M >> startVertex;
for(int i = 1; i <= M; i ++)
{
int x, y;
fin >> x >> y;
G[x].push_back(y);
}
bfs(N, M, startVertex);
for(int i = 1; i <= N; i ++)
if( visited[i] == 0 )
distance_arr[i] = -1;
for(int i = 1 ; i <= N; i ++)
fout << distance_arr[i] <<" ";
fin.close();
fout.close();
return 0;
}