Pagini recente » Cod sursa (job #49991) | Cod sursa (job #2892740) | Cod sursa (job #1459546) | Cod sursa (job #355555) | Cod sursa (job #2273303)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 100005
using namespace std;
ifstream f ("bfs.in");
ofstream g ("bfs.out");
vector<int>graf[NMAX];
unsigned int n, m, nod_start;
int distante[NMAX];
queue<int> coada;
void initDistante();
void read ()
{
f>>n>>m>>nod_start;
for (unsigned int i=1;i<=m;++i)
{
pair<int,int>coordonare;
f>>coordonare.first>>coordonare.second;
graf[coordonare.first].push_back(coordonare.second);
}
initDistante();
coada.push(nod_start);
}
void initDistante ()
{
for (int i=1;i<=n;++i)
distante[i]=-1;
distante[nod_start]=0;
}
void bfs ()
{
int nod_curent, nod_vecin;
while (!coada.empty())
{
nod_curent = coada.front();
coada.pop();
for (unsigned int i=1;i<=graf[nod_curent].size();++i)
{
nod_vecin = graf[nod_curent][i];
if (distante[i]=-1)
{
coada.push(nod_vecin);
distante[nod_vecin] = distante[nod_curent] + 1;
}
}
}
}
void printSolution ()
{
for (unsigned int i=1;i<=n;++i)
g<<distante[i]<<' ';
}
int main()
{
read();
bfs();
printSolution();
return 0;
}