Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<stack>
- using namespace std;
- int vertex,edge,source,time,adjacency_matrix[100][100],parent[100],Distance[100],Finishing_time[100];
- string color[100];
- stack<int> result;
- void inputGraph();
- void initialize();
- void doDFS();
- void doDFSvisit(int);
- void printPath();
- //void printAll();
- //void printAdjacencyMatrix();
- //void printColor();
- //void printDistance();
- //void printParent();
- int main(void)
- {
- inputGraph();
- initialize();
- doDFS();
- printPath();
- //printAll();
- return 0;
- }
- void inputGraph()
- {
- cout<<"Total vertex : ";
- cin>>vertex;
- cout<<"Total edge : ";
- cin>>edge;
- int i,j;
- for(i=1; i<=edge; i++)
- {
- int start,finish;
- cout<<"Enter start and end node for edge "<<i<<" : ";
- cin>>start;
- cin>>finish;
- adjacency_matrix[start][finish]=1;
- }
- cout<<"The adjacency matrix is : "<<endl;
- for(i=1; i<=vertex; i++)
- {
- for(j=1; j<=vertex; j++)
- {
- cout<<adjacency_matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- }
- void initialize()
- {
- cout<<"Enter source node : ";
- cin>>source;
- }
- void doDFS()
- {
- int i,j;
- for(i=1; i<=vertex; i++)
- {
- color[i]="white";
- parent[i]=0;
- }
- time=0;
- //super correction : add this line ( even in algorithm if need )
- doDFSvisit(source);
- //
- for(i=1; i<=vertex; i++)
- {
- if(color[i]=="white")
- {
- doDFSvisit(i);
- }
- }
- }
- void doDFSvisit(int node)
- {
- int i;
- time=time+1;
- Distance[node]=time;
- color[node]="grey";
- for(i=1; i<=vertex; i++)
- {
- if(adjacency_matrix[node][i]==1)
- {
- if(color[i]=="white")
- {
- parent[i]=node;
- doDFSvisit(i);
- }
- }
- }
- color[node]="black";
- //extra line for result
- result.push(node);
- //cout<<"Pushed : "<<node<<endl;
- //
- time=time+1;
- Finishing_time[node]=time;
- }
- void printPath()
- {
- cout<<"Path :"<<endl;
- int i;
- //cout<<"Stack size : "<<result.size()<<endl;
- //int stackSize = result.size();
- for(i=1; i<=vertex; i++)
- {
- cout<<result.top()<<" -> ";
- result.pop();
- }
- cout<<" End"<<endl;
- }
- /*
- void printAll()
- {
- int i,j;
- //adjacency matrix
- cout<<"The adjacency matrix is : "<<endl;
- for(i=1; i<=vertex; i++)
- {
- for(j=1; j<=vertex; j++)
- {
- cout<<adjacency_matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- //color
- cout<<"Color : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Color of node "<<j<<" is : "<<color[j]<<endl;
- }
- cout<<endl;
- //distance
- cout<<"Distance : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Distance of node "<<j<<" is : "<<Distance[j]<<endl;
- }
- cout<<endl;
- //parent
- cout<<"Parent : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Parent of node "<<j<<" is : "<<parent[j]<<endl;
- }
- cout<<endl;
- //finishing time
- for(j=1; j<=vertex; j++)
- {
- cout<<"Parent of node "<<j<<" is : "<<Finishing_time[j]<<endl;
- }
- cout<<endl;
- }
- void printAdjacencyMatrix()
- {
- int i,j;
- //adjacency matrix
- cout<<"The adjacency matrix is : "<<endl;
- for(i=1; i<=vertex; i++)
- {
- for(j=1; j<=vertex; j++)
- {
- cout<<adjacency_matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- }
- void printColor()
- {
- int j;
- //color
- cout<<"Color : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Color of node "<<j<<" is : "<<color[j]<<endl;
- }
- cout<<endl;
- }
- void printDistance()
- {
- int j;
- //distance
- cout<<"Distance : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Distance of node "<<j<<" is : "<<Distance[j]<<endl;
- }
- cout<<endl;
- }
- void printParent()
- {
- int j;
- //parent
- cout<<"Parent : "<<endl;
- for(j=1; j<=vertex; j++)
- {
- cout<<"Parent of node "<<j<<" is : "<<parent[j]<<endl;
- }
- cout<<endl;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement