Pagini recente » Cod sursa (job #2656887) | Cod sursa (job #3332401) | Cod sursa (job #475253) | Cod sursa (job #391311) | Cod sursa (job #3335543)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int N = 1e5 + 1;
vector<queue<int>> lista_ad(N + 1);
queue<int> q;
int d[N + 1];
bool vizitat[N + 1];
int main()
{
int n, m, s;
// s este nodul sursa
in >> n >> m >> s;
int u, v;
for (int i = 0; i < m; i++)
{
in >> u >> v;
lista_ad[u].push(v);
}
// pt fiecare nod X vrem sa gasim distanta minima de la nodul sursa S la X
// deci implementam BFS ca sa parcurgem in latime graful
for (int i = 1; i <= n; i++)
{
d[i] = -1;
vizitat[i] = false;
}
q.push(s);
d[s] = 0;
vizitat[s] = true;
while (!q.empty())
{
int curent = q.front();
q.pop();
while (!lista_ad[curent].empty())
{
// parcurgem varfurile adiacente nodului curent
int v = lista_ad[curent].front();
lista_ad[curent].pop();
if (!vizitat[v])
{
d[v] = d[curent] + 1;
vizitat[v] = true;
q.push(v);
}
}
}
for (int i = 1; i <= n; i++)
{
out << d[i] << " ";
}
return 0;
}