HmHimu

bfs_list

Jul 20th, 2017
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include<iostream>
  2. #include<list>
  3. #include<queue>
  4. using namespace std;
  5. //int m[10][10];
  6. list<int> adj[100];
  7. list<int>::iterator it;
  8.  
  9. void bfs(int s,int v){
  10. int clr[v],p[v],d[v];
  11. for(int i=1;i<=v;i++){
  12. clr[i]=0;
  13. p[i]=-1;
  14. d[i]=20000;
  15. }
  16. clr[s]=1;
  17. p[s]=-1;
  18. d[s]=0;
  19. int u;
  20. queue<int>Q;
  21. Q.push(s);
  22. while(!Q.empty()){
  23. u=Q.front();
  24. Q.pop();
  25. //int i=1;
  26. for(int i=1;i<=v;i++){
  27. for(it=adj[u].begin();it!=adj[u].end();it++){
  28.  
  29. if(clr[i]==0){
  30. clr[i]=1;
  31. d[i]=d[u]+1;
  32. p[i]=u;
  33. Q.push(i);
  34.  
  35. }
  36. }
  37. //i++;
  38. clr[u]=2;
  39. }
  40. }
  41. for(int i=1;i<=v;i++){
  42. cout<<i<<" ";
  43. }
  44. cout<<endl;
  45. for(int i=1;i<=v;i++){
  46. cout<<clr[i]<<" ";
  47. }
  48. cout<<endl;
  49. for(int i=1;i<=v;i++){
  50. cout<<p[i]<<" ";
  51. }
  52. cout<<endl;
  53. for(int i=1;i<=v;i++){
  54. cout<<d[i]<<" ";
  55. }
  56. }
  57. int main(){
  58. int v,k=1,a,b;
  59. //list<int> adj[100];
  60. //list<int>::iterator it;
  61. cout<<"Input Number of vertex: ";
  62. cin>>v;
  63. while(1){
  64. cout<<"Edge "<<k<<": ";
  65. cin>>a>>b;
  66. if(a>v||b>v){
  67. cout<<"Invalid Input."<<endl;
  68. }
  69. else if(a==0&&b==0){
  70. break;
  71. }
  72. else{
  73. adj[a].push_back(b);
  74. adj[b].push_back(a);
  75. k++;
  76. }
  77. }
  78. for(int i=1;i<=v;i++){
  79. cout<<"Adj["<<i<<"]";
  80. for(it=adj[i].begin();it!=adj[i].end();it++){
  81. cout<<"->"<<*it;
  82. }
  83. cout<<endl;
  84. }
  85. int s;
  86. z:
  87. cout<<"enter the source node: ";
  88. cin>>s;
  89. if(s>v){
  90. cout<<"Invalid"<<endl;
  91. goto z;
  92. }
  93. else{
  94. bfs(s,v);
  95. }
  96. }
Add Comment
Please, Sign In to add comment