Pagini recente » Cod sursa (job #356943) | Cod sursa (job #1237481) | Cod sursa (job #3040749) | Cod sursa (job #1136629) | Cod sursa (job #2252679)
#include<bits/stdc++.h>
using namespace std;
const int N_MAX = 1e5 + 5;
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;
memset(distance_arr, -1, sizeof(distance_arr));
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 ++)
fout << distance_arr[i] <<" ";
fin.close();
fout.close();
return 0;
}