fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void dfsVisit (vector<vector<int>>& graph, vector<bool>& visited, int current,vector<int>& discTime,vector<int>& finishTime,int &t,int arr[],int &k){
  5.  
  6. visited [current] = true;
  7. arr[k]=current;
  8. k++;
  9. discTime[current]=++t;
  10. for(int i=0; i<graph.size(); i++){
  11. if(graph[current][i]==1 && visited[i]==false)
  12. dfsVisit(graph, visited, i,discTime,finishTime,t,arr,k);
  13. }
  14. finishTime[current]=++t;
  15. }
  16.  
  17. void dfs(vector<vector<int>>& graph, vector<bool>& visited,vector<int>& discTime,vector<int>& finishTime,int &t,int arr[],int &k){
  18. for(int i=0; i<graph.size(); i++){
  19. if(visited[i]==false)
  20. dfsVisit(graph, visited, i,discTime,finishTime,t,arr,k);
  21. }
  22. }
  23.  
  24. int main() {
  25.  
  26. int n;
  27. cout << "Enter the number of nodes: " << endl;
  28. cin >> n;
  29. // defining the adjacency matrix
  30.  
  31. vector<vector<int>> graph (n,vector<int>(n,0));
  32.  
  33. // creating the adjacency matrix
  34. for(int i=0; i<n; i++){
  35. for(int j=0; j<n; j++)
  36. cin >> graph[i][j];
  37. }
  38. vector<bool> visited (n, false);
  39. vector<int> discTime (n, 0);
  40. vector<int> finishTime (n, 0);
  41. int t=0,k=0;
  42. int arr[n];
  43.  
  44. cout << "DFS Traversal Sequence: " << endl;
  45. dfs(graph,visited,discTime,finishTime,t,arr,k);
  46. for(int i=0;i<n;i++){
  47. cout<<"Node: "<< arr[i]<<"-->"<<discTime[arr[i]]<<"--"<<finishTime[arr[i]]<<endl;
  48. }
  49. return 0;
  50. }
  51.  
Success #stdin #stdout 0.01s 5280KB
stdin
8
0 0 0 1 0 0 0 1
0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 1 0 0 0 1 0 1
0 0 0 0 1 1 0 0
stdout
Enter the number of nodes: 
DFS Traversal Sequence: 
Node: 0-->1--10
Node: 3-->2--3
Node: 7-->4--9
Node: 4-->5--6
Node: 5-->7--8
Node: 1-->11--12
Node: 2-->13--16
Node: 6-->14--15