Advertisement
rootUser

BFS (OWN)

Jun 19th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. #include<iostream>
  2. #include<queue>
  3. using namespace std;
  4.  
  5. int vertex,edge,source,adjacency_matrix[100][100],parent[100],Distance[100];
  6. string color[100];
  7. queue<int> qe;
  8. queue<int> result;
  9.  
  10. void inputGraph();
  11. void initialize();
  12. void doBFS();
  13. void printAll();
  14. void printPath();
  15. //void printAdjacencyMatrix();
  16. //void printColor();
  17. //void printDistance();
  18. //void printParent();
  19.  
  20. int main(void)
  21. {
  22.     inputGraph();
  23.     initialize();
  24.     doBFS();
  25.     printPath();
  26.     //printAll();
  27.     return 0;
  28. }
  29. void inputGraph()
  30. {
  31.     cout<<"Total vertex : ";
  32.     cin>>vertex;
  33.     cout<<"Total edge   : ";
  34.     cin>>edge;
  35.     int i,j;
  36.     for(i=1; i<=edge; i++)
  37.     {
  38.         int start,finish;
  39.         cout<<"Enter start and end node for edge "<<i<<" : ";
  40.         cin>>start;
  41.         cin>>finish;
  42.         adjacency_matrix[start][finish]=1;
  43.         adjacency_matrix[finish][start]=1;
  44.     }
  45.     cout<<"The adjacency matrix is : "<<endl;
  46.     for(i=1; i<=vertex; i++)
  47.     {
  48.         for(j=1; j<=vertex; j++)
  49.         {
  50.             cout<<adjacency_matrix[i][j]<<" ";
  51.         }
  52.         cout<<endl;
  53.     }
  54. }
  55. void initialize()
  56. {
  57.     cout<<"Enter source node : ";
  58.     cin>>source;
  59.     int i,j;
  60.     for(j=1; j<=vertex; j++)
  61.     {
  62.         color[j]="white";
  63.         Distance[j]=INT_MAX;
  64.         parent[j]=0;
  65.     }
  66.     color[source]="grey";
  67.     Distance[source]=0;
  68.     parent[source]=0;
  69. }
  70. void doBFS()
  71. {
  72.     int i,j;
  73.     qe.push(source);
  74.     while(qe.size()!=0)
  75.     {
  76.         int node = qe.front();
  77.         qe.pop();
  78.         for(j=1; j<=vertex; j++)
  79.         {
  80.             if(adjacency_matrix[node][j]==1)
  81.             {
  82.                 if(color[j]=="white")
  83.                 {
  84.                     color[j]="grey";
  85.                     Distance[j]=Distance[node]+1;
  86.                     parent[j]=node;
  87.                     qe.push(j);
  88.                 }
  89.             }
  90.         }
  91.         color[node]="black";
  92.         //extra line for printing path
  93.         result.push(node);
  94.     }
  95. }
  96. void printPath()
  97. {
  98.     cout<<"Path :"<<endl;
  99.     int i;
  100.     for(i=0;i<=result.size();i++)
  101.     {
  102.         cout<<result.front()<<" -> ";
  103.         result.pop();
  104.     }
  105.     cout<<" End"<<endl;
  106. }
  107.  
  108. /*
  109. void printAll()
  110. {
  111.     int i,j;
  112.     //adjacency matrix
  113.     cout<<"The adjacency matrix is : "<<endl;
  114.     for(i=1; i<=vertex; i++)
  115.     {
  116.         for(j=1; j<=vertex; j++)
  117.         {
  118.             cout<<adjacency_matrix[i][j]<<" ";
  119.         }
  120.         cout<<endl;
  121.     }
  122.     //color
  123.     cout<<"Color : "<<endl;
  124.     for(j=1; j<=vertex; j++)
  125.     {
  126.         cout<<"Color of node "<<j<<" is : "<<color[j]<<endl;
  127.     }
  128.     cout<<endl;
  129.     //distance
  130.     cout<<"Distance : "<<endl;
  131.     for(j=1; j<=vertex; j++)
  132.     {
  133.         cout<<"Distance of node "<<j<<" is : "<<Distance[j]<<endl;
  134.     }
  135.     cout<<endl;
  136.     //parent
  137.     cout<<"Parent : "<<endl;
  138.     for(j=1; j<=vertex; j++)
  139.     {
  140.         cout<<"Parent of node "<<j<<" is : "<<parent[j]<<endl;
  141.     }
  142.     cout<<endl;
  143. }
  144.  
  145. void printAdjacencyMatrix()
  146. {
  147.     int i,j;
  148.     //adjacency matrix
  149.     cout<<"The adjacency matrix is : "<<endl;
  150.     for(i=1; i<=vertex; i++)
  151.     {
  152.         for(j=1; j<=vertex; j++)
  153.         {
  154.             cout<<adjacency_matrix[i][j]<<" ";
  155.         }
  156.         cout<<endl;
  157.     }
  158. }
  159. void printColor()
  160. {
  161.     int j;
  162.     //color
  163.     cout<<"Color : "<<endl;
  164.     for(j=1; j<=vertex; j++)
  165.     {
  166.         cout<<"Color of node "<<j<<" is : "<<color[j]<<endl;
  167.     }
  168.     cout<<endl;
  169. }
  170. void printDistance()
  171. {
  172.     int j;
  173.     //distance
  174.     cout<<"Distance : "<<endl;
  175.     for(j=1; j<=vertex; j++)
  176.     {
  177.         cout<<"Distance of node "<<j<<" is : "<<Distance[j]<<endl;
  178.     }
  179.     cout<<endl;
  180. }
  181. void printParent()
  182. {
  183.     int j;
  184.     //parent
  185.     cout<<"Parent : "<<endl;
  186.     for(j=1; j<=vertex; j++)
  187.     {
  188.         cout<<"Parent of node "<<j<<" is : "<<parent[j]<<endl;
  189.     }
  190.     cout<<endl;
  191. }
  192. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement