Pagini recente » Cod sursa (job #3245589) | Cod sursa (job #1065330) | Cod sursa (job #441180) | Cod sursa (job #2753537) | Cod sursa (job #830812)
Cod sursa(job #830812)
# include <cstdio>
# include <vector>
# include <queue>
# include <bitset>
using namespace std;
int const Nmax = 100005;
int n, m, start;
void read(), write(), breadthTraversal();
vector <int> V[Nmax];
queue <int> Q;
bitset <Nmax> Check;
class Level
{
public :
int Lvl[Nmax];
Level()
{
for (int i = 1; i < Nmax; ++i)
Lvl[i] = -1;
}
};
Level graf;
int main ()
{
read();
breadthTraversal();
write();
return 0;
}
void read ()
{
FILE *INPUT_FILE;
INPUT_FILE = fopen ("bfs.in", "rt");
fscanf (INPUT_FILE, "%d%d%d", &n, &m, &start);
for (int i = 1; i <= m; ++i)
{
int x, y;
fscanf (INPUT_FILE, "%d%d", &x, &y);
V[x].push_back(y);
}
fclose (INPUT_FILE);
}
void write ()
{
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen ("bfs.out", "wt");
for (int i = 1; i <= n; ++i)
{
fprintf (OUTPUT_FILE, "%d ", graf.Lvl[i]);
}
fprintf (OUTPUT_FILE, "\n");
fclose (OUTPUT_FILE);
}
void breadthTraversal ()
{
graf.Lvl[start] = 0;
Check[start].flip();
Q.push(start);
for (; !Q.empty(); Q.pop())
{
int now = Q.front();
for (vector<int> :: iterator it = V[now].begin(); it != V[now].end(); ++it)
{
if (!Check[*it])
{
Check[*it].flip();
Q.push(*it);
graf.Lvl[*it] = graf.Lvl[now] + 1;
}
}
}
}