fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. bool dfs(string name,unordered_map<string,unordered_set<string>> & adj,
  5. unordered_map <int,vector<string>> &results,unordered_map<string,int> &visited,int level)
  6. {
  7. visited[name] =1;
  8. for(auto it : adj[name])
  9. {
  10. if(visited[it]==0)
  11. {
  12. if(!dfs(it,adj,results,visited,level+1))
  13. {
  14.  
  15. return false;
  16. }
  17. }
  18. else if(visited[it]==1)
  19. {
  20. return false;
  21. }
  22. }
  23. visited[name] =2;
  24. results[level].push_back(name);
  25. return true;
  26. }
  27.  
  28.  
  29. int main() {
  30. // your code goes here
  31. unordered_map<string,unordered_set<string>> adj = {
  32. {"Service", {"Adapters", "Core", "Utils"}},
  33. {"Adapters", {"Interfaces"}},
  34. {"Core", {"Types"}},
  35. {"Utils", {"Types"}},
  36. {"Interfaces", {}},
  37. {"Types", {}} };
  38. unordered_map<string,int> visited;
  39. for(auto it : adj)
  40. {
  41. for(auto ele : it.second)
  42. {
  43. visited[ele]= 0;
  44. }
  45. visited[it.first]= 0;
  46. }
  47. string name = "Service";
  48. unordered_map <int,vector<string>> results;
  49. if(dfs(name,adj,results,visited,1))
  50. {
  51. for(int i=results.size();i>=1;i--)
  52. {
  53. for(auto it : results[i])
  54. {
  55. cout<<" > "<<it;
  56. }
  57. }
  58. }
  59. else
  60. {
  61. cout<<"Cycle detected no path possible";
  62. }
  63.  
  64. return 0;
  65. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
 > Types > Interfaces > Core > Utils > Adapters > Service