Advertisement
rootUser

DFS (OWN)

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