Pagini recente » Cod sursa (job #1735638) | Cod sursa (job #1362064) | Cod sursa (job #2946938) | Cod sursa (job #590564) | Cod sursa (job #2252692)
#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())
{
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]] = distance_arr[currentNode] + 1;
}
}
}
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;
}