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. vector<string> & results,unordered_map<string,int> &visited)
  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))
  13. {
  14. return false;
  15. }
  16.  
  17. }
  18. else if(visited[it]==1)
  19. {
  20. return false;
  21. }
  22. }
  23. visited[name] =2;
  24. results.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", {"Types"}},
  37. {"Types", {}}
  38. };
  39. unordered_map<string,int> visited;
  40. for(auto it : adj)
  41. {
  42. for(auto ele : it.second)
  43. {
  44. visited[ele]= 0;
  45. }
  46. visited[it.first]= 0;
  47. }
  48. string name = "Service";
  49. vector<string> results;
  50. if(dfs(name,adj,results,visited))
  51. {
  52. for(string s : results)
  53. {
  54. cout<<"...."<<s;
  55. }
  56. }
  57. else
  58. {
  59. cout<<"Cycle detected no path possible";
  60. }
  61.  
  62. return 0;
  63. }
Success #stdin #stdout 0.01s 5312KB
stdin
Standard input is empty
stdout
....Types....Core....Utils....Interfaces....Adapters....Service