Pagini recente » Cod sursa (job #1633392) | Cod sursa (job #553487) | Cod sursa (job #1414968) | Cod sursa (job #2500175) | Cod sursa (job #1143183)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n,m,s;
vector<bool> marc;
vector<int> cost;
typedef struct Nod
{
int x;
Nod *a;
} *pNod;
pNod v[100001];
void add(pNod &destinatie,int valoare)
{
pNod p;
p = new Nod;
p->x = valoare;
p->a = destinatie;
destinatie = p;
}
void citire()
{
ifstream f("bfs.in");
f>>n>>m>>s;
marc.resize(n+1,false);
cost.resize(n+1,-1);
int a,b;
for(int i=1;i<=m;i++)
{
f>>a>>b;
add(v[a],b);
}
f.close();
}
void rezolvare()
{
int nod,vrf;
queue<int> q;
marc[s]=true;
cost[s]=0;
for(pNod p=v[s]; p != NULL; p=p->a)
{
nod=p->x;
if(nod!=s)
{
q.push(nod);
marc[nod]=true;
cost[nod]=1;
}
}
while(!q.empty())
{
nod=q.front();
q.pop();
for(pNod p=v[nod]; p != NULL; p=p->a)
{
vrf=p->x;
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;
}