Pagini recente » Cod sursa (job #960954) | Cod sursa (job #2096125) | Cod sursa (job #343752) | Cod sursa (job #2440002) | Cod sursa (job #2231218)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAX_N 100005
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n, m, s;
vector<int> lista[MAX_N]; // schimat reprezentarea in memorie
int distante[MAX_N] = { 0 };
queue<int> nodeQueue;
void BFS()
{
nodeQueue.push(s);
distante[s] = 0;
int crtNod = s;
int distanta = distante[s];
while (!nodeQueue.empty())
{
crtNod = nodeQueue.front();
nodeQueue.pop();
distanta = distante[crtNod];
for(int i = 0; i < lista[crtNod].size(); i++)
{
int newDist = distanta + 1;
if (distante[lista[crtNod][i]] == -1 || newDist < distante[lista[crtNod][i]])
{
distante[lista[crtNod][i]] = newDist;
nodeQueue.push(lista[crtNod][i]);
}
}
}
}
int main(void)
{
fin >> n >> m >> s;
for (int i = 0; i < m; i++)
{
int n1, n2;
fin >> n1 >> n2;
lista[n1].push_back(n2);
}
for (int i = 1; i <= n; i++)
{
distante[i] = -1;
}
BFS();
for (int i = 1; i <= n; i++)
{
fout << distante[i] << " ";
}
fin.close();
fout.close();
return 0;
}