Advertisement
HmHimu

BFS(MATRIX FULL)

May 25th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. #include<iostream>
  2. #include<list>
  3. #include<queue>
  4. using namespace std;
  5. int adj[100][100];
  6. list<int>::iterator it;
  7. int prev[100],d[100],color[100];
  8.  
  9. void BFS(int s,int v)
  10. {
  11. for(int i=1;i<=v;i++){
  12. prev[i]=-1;
  13. color[i]=0;
  14. d[i]=0;
  15. }
  16. queue<int> q;
  17. color[s]=1;
  18. q.push(s);
  19. while(!q.empty()){
  20. int u=q.front();
  21. q.pop();
  22. for(int i=1;i<=v;i++){
  23. int k=adj[u][i];
  24. if(k==1&&color[i]==0){
  25. color[i]=1;
  26. prev[i]=u;
  27. d[i]=d[u]+1;
  28. q.push(i);
  29.  
  30. }
  31. }
  32. color[u]=2;
  33. }
  34.  
  35. }
  36.  
  37. int main()
  38. {
  39. int v;
  40. cout<<"vertex: ";
  41. cin>>v;
  42. for(int i=1;i<=v;i++){
  43. for(int j=1;j<=v;j++){
  44. adj[i][j]=0;
  45. }
  46. }
  47. for(int i=1;;i++){
  48. int m,n;
  49. cout<<"Edge "<<i<<": ";
  50. cin>>m>>n;
  51. if(m==0&&n==0){
  52. break;
  53. }
  54. else if(m>v||n>v){
  55. cout<<"Please Right Input: ";
  56. cout<<"Edge "<<i++<<": ";
  57. cin>>m>>n;
  58. adj[m][n]=1;
  59. adj[n][m]=1;
  60. }
  61. else{
  62. adj[m][n]=1;
  63. adj[n][m]=1;
  64. }
  65. }
  66. for(int i=1;i<=v;i++){
  67. for(int j=1;j<=v;j++){
  68. cout<<adj[i][j]<<" ";
  69. }
  70. cout<<endl;
  71. }
  72. cout<<"Input Source: ";
  73. int s;
  74. cin>>s;
  75. BFS(s,v);
  76. cout<<"COLOR: ";
  77. for(int i=1;i<=v;i++){
  78. cout<<color[i]<<" ";
  79. }
  80. cout<<endl;
  81. cout<<"COST: ";
  82. for(int i=1;i<=v;i++){
  83. cout<<d[i]<<" ";
  84. }
  85. cout<<endl;
  86. cout<<"PREVIOUS: ";
  87. for(int i=1;i<=v;i++){
  88. cout<<prev[i]<<" ";
  89. }
  90. cout<<endl;
  91. for(int i=1;i<=v;i++){
  92. if(d[i]%2==0){
  93. cout<<i<<" Even "<<endl;
  94. }
  95. else{
  96. cout<<i<<" ODD "<<endl;
  97. }
  98. }
  99. int maximum=0;
  100. for(int i=1;i<=v;i++)
  101. {
  102. if(maximum<d[i])
  103. {
  104. maximum=d[i];
  105. }
  106. }
  107. for(int i=1;i<=v;i++)
  108. {
  109. if(maximum==d[i])
  110. {
  111. cout << " maximum node is" <<i << endl;
  112. }
  113. }
  114.  
  115. return 0;
  116.  
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement