Pagini recente » Cod sursa (job #1050191) | Cod sursa (job #3167074) | Rating UTCNTractor (UTCN_Andrei_Caldarea_Mihailescu) | Cod sursa (job #1804669) | Cod sursa (job #3229337)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
#define MAX_NODES 100001
int nodes, edges, source;
queue <pair < int, int> > Queue;
vector <vector <int>> adj(MAX_NODES);
vector <int> visited (MAX_NODES, false);
vector <int> dist (MAX_NODES);
void bfs(int source) {
visited[source] = true;
pair <int, int> p;
p.first = source;
p.second = 0;
Queue.push(make_pair(source, 0));
while (!Queue.empty()) {
p = Queue.front();
Queue.pop();
int currentNode = p.first;
int level = p.second;
for (int neighbor : adj[currentNode]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
dist[neighbor] = level +1 ;
Queue.push(make_pair(neighbor, level + 1));
}
}
}
}
int main() {
fin>>nodes>>edges>>source;
int x, y;
for (int i = 0; i < edges; i++) {
fin>>x>>y;
adj[x].push_back(y);
}
bfs(source);
for (int i = 1; i <= nodes; i++) {
if (!dist[i] && i != source)
fout<<-1;
else fout<<dist[i];
fout<<' ';
}
return 0;
}