Pagini recente » Cod sursa (job #2328832) | Cod sursa (job #1933752) | Cod sursa (job #1343807) | Cod sursa (job #1621547) | Cod sursa (job #1182122)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
#define DMAX 100001
#define INF -1
struct Graph{
char inf[DMAX]; // content
char color[DMAX]; // w->g->b
int p[DMAX], d[DMAX]; // p = parent, d = distance
vector<int> Adj[DMAX]; // Adj list
vector<pair<int, int>> Edge;
} G;
int n, m;
queue<int> Q;
void BFS(int r){
int son, lg, i, next;
for (i = 1; i <= n; i++) {
G.color[i] = 'w';
G.d[i] = INF;
G.p[i] = 0;
}
G.color[r] = 'g';
G.d[r] = 0;
Q.push(r);
while (!Q.empty()){
son = Q.front(); Q.pop();
lg = G.Adj[son].size();
for (i = 0; i < lg; i++){
next = G.Adj[son][i];
if (G.color[next] == 'w'){
G.color[next] = 'g';
G.d[next] = G.d[son] + 1;
G.p[next] = son;
Q.push(next);
}
}
G.color[son] = 'b';
}
}
int main(){
int i, ui, vi, source;
fin >> n >> m >> source;
for (i = 0; i < m; i++) {
fin >> ui >> vi;
G.Adj[ui].push_back(vi);
G.Edge.push_back(make_pair(ui, vi));
}
BFS(source);
for (i = 1; i <= n; i++) fout << G.d[i] << ' ';
return 0;
}