Pagini recente » Cod sursa (job #1522934) | Cod sursa (job #450648) | Cod sursa (job #481841) | Cod sursa (job #151394) | Cod sursa (job #1143171)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n,m,s;
vector<bool> marc;
vector<int> cost;
vector<queue<int> >v;
void citire()
{
ifstream f("bfs.in");
f>>n>>m>>s;
marc.resize(n+1,false);
cost.resize(n+1,-1);
v.resize(n+1);
int a,b;
for(int i=1;i<=m;i++)
{
f>>a>>b;
v[a].push(b);
}
f.close();
}
void rezolvare()
{
int nod,vrf;
queue<int> q;
marc[s]=true;
cost[s]=0;
while(!v[s].empty())
{
nod = v[s].front();
v[s].pop();
if(nod!=s)
{
q.push(nod);
marc[nod]=true;
cost[nod]=1;
}
}
while(!q.empty())
{
nod=q.front();
q.pop();
while(!v[nod].empty())
{
vrf = v[nod].front();
v[nod].pop();
if(!marc[vrf])
{
q.push(vrf);
marc[vrf]=true;
cost[vrf]=cost[nod]+1;
}
}
}
}
void afisare()
{
ofstream g("bfs.out");
for(int i=1;i<=n;i++)
g<<cost[i]<<" ";
g<<"\n";
g.close();
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}