Pagini recente » Cod sursa (job #3149886) | Cod sursa (job #1913249) | Cod sursa (job #992751) | Cod sursa (job #2799152) | Cod sursa (job #2168208)
#include <fstream>
#include <queue>
#include <utility>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct node
{
int x;
node * next;
};
void bfs(int);
void citire();
void afisare();
int n, m, start;
int d[100005];
bool uz[100005];
node * G[100005];
queue<int> q;
int main()
{
citire();
bfs(start);
afisare();
return 0;
}
void afisare()
{
for (int i = 1; i <= n; i++)
{
if (i == start)
fout << 0 << ' ';
else fout << (d[i] == 0 ? -1 : d[i]) << ' ';
}
fout << '\n';
}
void bfs(int start)
{
q.push(start);
uz[start] = true;
while (!q.empty())
{
int x = q.front();
q.pop();
for (node * p = G[x]; p; p = p->next)
if (!uz[p->x])
{
uz[p->x] = true;
d[p->x] = d[x] + 1;
q.push(p->x);
}
}
}
void insertNode(node * & list, int x)
{
node * p = new node;
p->x = x;
p->next = list;
list = p;
}
void citire()
{
fin >> n >> m >> start;
int x, y;
for (int i = 1; i <= m; i++)
{
fin >> x >> y;
insertNode(G[x], y);
}
}