Pagini recente » Cod sursa (job #1205191) | Cod sursa (job #665607) | Cod sursa (job #1643785) | Cod sursa (job #2984229) | Cod sursa (job #2558341)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
const int Nlimita = 100001;
int N ,M ,S;
vector <int> muchii[Nlimita];
queue <int> coada;
int distanta[Nlimita];
void bfs ()
{
int nodcurent ,vecin;
while (!coada.empty()) //cat timp nu este goala
{
nodcurent = coada.front();
coada.pop(); //il sterg intrucat deja a fost vizitat
for (unsigned int i = 0 ;i < muchii[nodcurent].size() ;i++)
{
vecin = muchii[nodcurent][i]; //iau vecinii nodului p
if (distanta[vecin] == -1) //in caz ca nu am luat aceeasi distanta
{
coada.push(vecin); //pun in coada vecinu
distanta[vecin] = distanta[nodcurent] + 1; //logic...
}
}
}
}
void read()
{
fin >> N >> M >> S;
for (int i = 1 ;i <= M ;i++)
{
int x ,y;
fin >> x >> y;
muchii[x].push_back(y); //intrucat este orientat (un sesn pentru fiecare nod)
}
}
int main()
{
read();
for (int i = 1 ;i <= N ;i++)
distanta[i] = -1; //initializez toate distantele cu -1
distanta[S] = 0; //distanta dintre nodul cu el insusi este 0
coada.push(S); //incep sa pun in coada nodul si sa fac subprogramul propriu-zis
bfs();
for (int i = 1 ;i <= N ;i++)
fout << distanta[i] << " ";
}