Pagini recente » Cod sursa (job #1725238) | Cod sursa (job #1295149) | Cod sursa (job #121425) | Cod sursa (job #2199344) | Cod sursa (job #885377)
Cod sursa(job #885377)
#include<fstream>
#include<queue>
using namespace std;
fstream f,g;
class node{
public:
int info;
node* next;
node(){
info=0;
next=NULL;
}
~node(){
delete next;
}
};
class list: public node {
public:
node* first;
list(): node(){
first=new node;
}
void insert(int);
~list(){
delete first;
}
};
void list::insert(int y){
node* p=first;
if(first->info){
while(p->next) p=p->next;
node* q=new node;
p->next=q;
q->info=y;
}
else
first->info=y;
}
queue<int> coada;
list v[6];
int viz[6]={0},cont[6]={0};
void af(){
queue<int> coada2;
coada2=coada;
for(;!coada2.empty();coada2.pop())
g<<coada2.front()<<" ";
g<<endl;
}
void bfs(node* p,int a){
int aux;
for(;p;p=p->next)
if(!viz[p->info]){
coada.push(p->info);
cont[p->info]=cont[a]+1;
}
if(coada.empty()) return;
//af();
while(!coada.empty()&&viz[coada.front()]) coada.pop();
aux=coada.front();
if(!viz[aux]){
viz[aux]=1;
coada.pop();
bfs(v[aux].first,aux);
}
}
int main(){
int n,m,s,i,x,y;
f.open("bfs.in",ios::in);
g.open("bfs.out",ios::out);
f>>n>>m>>s;
for(i=0;i<m;++i){
f>>x>>y;
if(x!=y)
v[x].insert(y);
}
viz[s]=1;
coada.push(s);
bfs(v[s].first,s);
for(i=1;i<=n;++i)
if(!viz[i]) g<<"-1 ";
else g<<cont[i]<<" ";
g<<"\n";
return 0;
}