Pagini recente » Cod sursa (job #2889572) | Cod sursa (job #2668140) | Clasament xxxx_5 | Cod sursa (job #3245446) | Cod sursa (job #1380270)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<vector<int> > L(100000 + 1);
vector<int> cost(100000 + 1), tata(100000 + 1);
int n, m;
void afisare(int n)
{
for(int i = 1; i <= n; i++)
{
cout << i << ": ";
for(int j = 0; j < L[i].size(); j++)
{
cout << L[i][j] << ' ';
}
cout << '\n';
}
}
void bfs(int nod)
{
int st = 1;
int dr = 1;
vector<int> coada(n + 1);
cost.assign(n + 1, -1);
tata.assign(n + 1, 0);
cost[nod] = 0;
coada[st] = nod;
tata[nod] = nod;
while(st <= dr)
{
for(int j = 0; j < L[coada[st]].size(); j++)
{
if(cost[L[coada[st]][j]] == -1)
{
dr++;
coada[dr] = L[coada[st]][j];
cost[coada[dr]] = cost[coada[st]] + 1;
tata[L[coada[st]][j]] = coada[st];
}
}
st++;
}
//cout << "COADA: ";
//for(int i = 1; i <= n; i++)
// cout << coada[i] << ' ';
//cout << '\n';
//cout << "TATA: ";
//for(int i = 1; i <= n; i++)
// cout << tata[i] << ' ';
//cout << '\n';
}
int main()
{
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int s;
fin >> n >> m >> s;
for(int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
L[x].push_back(y);
}
bfs(s);
for(int i = 1; i <= n; i++)
fout << cost[i] << ' ';
///afisare(n);
///for(s = 1; s <= n; s++)
///{
/// bfs(s);
/// for(int i = 1; i <= n; i++)
/// fout << cost[i] << ' ';
/// fout << '\n';
///}
return 0;
}