Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<list>
- #include<queue>
- using namespace std;
- //int m[10][10];
- list<int> adj[100];
- list<int>::iterator it;
- void bfs(int s,int v){
- int clr[v],p[v],d[v];
- for(int i=1;i<=v;i++){
- clr[i]=0;
- p[i]=-1;
- d[i]=20000;
- }
- clr[s]=1;
- p[s]=-1;
- d[s]=0;
- int u;
- queue<int>Q;
- Q.push(s);
- while(!Q.empty()){
- u=Q.front();
- Q.pop();
- //int i=1;
- for(int i=1;i<=v;i++){
- for(it=adj[u].begin();it!=adj[u].end();it++){
- if(clr[i]==0){
- clr[i]=1;
- d[i]=d[u]+1;
- p[i]=u;
- Q.push(i);
- }
- }
- //i++;
- clr[u]=2;
- }
- }
- for(int i=1;i<=v;i++){
- cout<<i<<" ";
- }
- cout<<endl;
- for(int i=1;i<=v;i++){
- cout<<clr[i]<<" ";
- }
- cout<<endl;
- for(int i=1;i<=v;i++){
- cout<<p[i]<<" ";
- }
- cout<<endl;
- for(int i=1;i<=v;i++){
- cout<<d[i]<<" ";
- }
- }
- int main(){
- int v,k=1,a,b;
- //list<int> adj[100];
- //list<int>::iterator it;
- cout<<"Input Number of vertex: ";
- cin>>v;
- while(1){
- cout<<"Edge "<<k<<": ";
- cin>>a>>b;
- if(a>v||b>v){
- cout<<"Invalid Input."<<endl;
- }
- else if(a==0&&b==0){
- break;
- }
- else{
- adj[a].push_back(b);
- adj[b].push_back(a);
- k++;
- }
- }
- for(int i=1;i<=v;i++){
- cout<<"Adj["<<i<<"]";
- for(it=adj[i].begin();it!=adj[i].end();it++){
- cout<<"->"<<*it;
- }
- cout<<endl;
- }
- int s;
- z:
- cout<<"enter the source node: ";
- cin>>s;
- if(s>v){
- cout<<"Invalid"<<endl;
- goto z;
- }
- else{
- bfs(s,v);
- }
- }
Add Comment
Please, Sign In to add comment