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