Pagini recente » Cod sursa (job #2116445) | Cod sursa (job #3241930) | Cod sursa (job #1420909) | Cod sursa (job #2066728) | Cod sursa (job #1500073)
/*Cerinta
Fiind dat un nod S, sa se determine, pentru fiecare nod X, numarul minim de arce ce
trebuie parcurse pentru a ajunge din nodul sursa S la nodul X.
Date de intrare
Fisierul de intrare bfs.in contine pe prima linie 3 numere intregi N M S, cu semnificatia
din enunt. Urmatoarele M linii contin cate doua numere x y, cu semnificatia ca exista arc orientat de la x la y.
Date de iesire
In fisierul de iesire bfs.out se vor afla N numere separate prin spatiu cu semnificatia ca al
i-lea numar reprezinta numarul minim de arce ce trebuie parcurse de la nodul S la nodul i.
Restrictii
2 ≤ N ≤ 100 000
1 ≤ M ≤ 1 000 000
Daca nu se poate ajunge din nodul S la nodul i, atunci numarul corespunzator numarului i va fi -1.*/
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
const int NMax=100005;
int n,m,y;
vector <int> G[NMax];
int d[NMax];
queue <int> Q;
void citire()
{
f>>n>>m>>y;
for(int i=0;i<m;i++)
{
int a,b;
f>>a>>b;
G[a].push_back(b);
}
}
void BFS()
{
memset(d,-1,sizeof(d));
Q.push(y);
d[y]=0;
while(!Q.empty())
{
int nod=Q.front(); Q.pop();
for(int i=0;i<(int)G[nod].size();i++)
{
int val=G[nod][i];
if(d[val]==-1) d[val]=d[nod]+1 , Q.push(val);
}
}
}
int main()
{
citire();
BFS();
for(int i=1;i<=n;i++)
{
g<<d[i]<<' ';
}
g<<'\n';
return 0;
}