fork download
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<string>
  6. #include<stack>
  7. #include<queue>
  8. #include<algorithm>
  9. #define MAX 100
  10. #define initial 1
  11. #define waiting 2
  12. #define visited 3
  13. using namespace std;
  14. int adj[MAX][MAX];
  15. int state[MAX];
  16. int n;
  17. void create_graph(){
  18. int max_edge,org,des;
  19. cout<<"N: ";
  20. cin>>n;
  21. max_edge = n*(n-1);
  22. for(int i=0;i<max_edge;i++){
  23. cout<<i<<": ";
  24. cin>>org>>des;
  25. if(org==-1 && des==-1)
  26. break;
  27. if(org>n || des>n || org<0 || des<0){
  28. cout<<"Invalid Edge"<<endl;
  29. i--;
  30. }
  31. else
  32. adj[org][des] = 1;
  33. }
  34. }
  35. void DFS(int v){
  36. int i;
  37. stack<int> s;
  38. s.push(v);
  39. while(!s.empty()){
  40. v = s.top();s.pop();
  41. if(state[v]==initial){
  42. cout<<v<<" ";
  43. state[v] = visited;
  44. }
  45. for(i=n-1;i>=0;i++){
  46. if(adj[v][i]==1 && state[i]==initial)
  47. s.push(i);
  48. }
  49. }
  50. }
  51. void DF_travarsal(){
  52. int v;
  53. for(v=0;v<n;v++)
  54. state[v] = initial;
  55. cout<<"Starting Node: ";
  56. cin>>v;
  57. DFS(v);
  58. }
  59. void BFS(int v){
  60. int i;
  61. queue<int> q;
  62. q.push(v);
  63. state[v] = waiting;
  64. while(!q.empty()){
  65. v = q.front();q.pop();
  66. cout<<"v: "<<v<<endl;
  67. state[v] = visited;
  68. for(i=0;i<n;i++){
  69. if(adj[v][i]==1 && state[i]==initial){
  70. q.push(i);
  71. state[i] = waiting;
  72. }
  73. }
  74. }
  75. }
  76. void BF_travarsal(){
  77. int v;
  78. for(v=0;v<n;v++)
  79. state[v] = initial;
  80. cout<<"Starting Node: "<<endl;
  81. cin>>v;
  82. BFS(v);
  83. }
  84. int main(){
  85. create_graph();
  86. DF_travarsal();
  87. return 0;
  88. }
Success #stdin #stdout 0s 3320KB
stdin
Standard input is empty
stdout
N: Starting Node: