Pagini recente » Cod sursa (job #3247360) | Cod sursa (job #7237) | Cod sursa (job #354235) | Cod sursa (job #1314068) | Cod sursa (job #2301921)
#include <cstdio>
#include <utility>
#include <queue>
#define LMAX 100005
#define mp make_pair
using namespace std;
FILE *fin=fopen("bfs.in", "r");
FILE *fout=fopen("bfs.out", "w");
vector<int> G[LMAX];
int niv[LMAX];
int n, m, start;
bool uz[LMAX];
queue<pair<int, int>>q;
int x, y;
void bfs(int start)
{
q.push(mp(start,0));
uz[start] = 1;
while (!q.empty())
{
pair<int,int>act = q.front();
q.pop();
niv[act.first] = act.second;
for (int i =0;i<G[act.first].size();++i)
{
if (!uz[G[act.first][i]])
{
uz[G[act.first][i]] = 1;
q.push(mp(G[act.first][i], act.second+1));
}
}
}
}
int main()
{
fscanf(fin, "%d %d %d", &n, &m, &start);
for (int i =1;i<=m;++i)
{
fscanf(fin, "%d %d",&x,&y);
G[x].push_back(y);
}
for (int i = 1;i<=n;++i)
{
niv[i] = -1;
}
bfs(start);
for (int i =1;i<=n;++i)
{
fprintf(fout, "%d ", niv[i]);
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}