Pagini recente » Cod sursa (job #1798330) | Cod sursa (job #261815) | Cod sursa (job #1435913) | Cod sursa (job #3126456) | Cod sursa (job #2207697)
//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.
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,s, viz[100001];
vector <int> v[100001];
queue <int> c;
void citire()
{
int i,j,k;
f>>n>>m>>s;
for(k=0; k<m; k++)
{
f>>i>>j;
v[i].push_back(j);
}
}
void parcLatime(int i)
{
int j,x;
c.push(i);
viz[i]=1;
while(!c.empty())
{
x=c.front();
c.pop();
for(j=0; j<v[x].size(); j++)
if(viz[v[x][j]]==0)
{
c.push(v[x][j]);
viz[v[x][j]]=viz[x]+1;
}
}
}
int main()
{
int i;
citire();
parcLatime(s);
for(i=1; i<=n; i++)
if(viz[i]==0) g<<-1<<" ";
else
if(i==s) g<<0<<" ";
else
g<<viz[i]-1<<" ";
f.close();
g.close();
return 0;
}