Advertisement
Guest User

Untitled

a guest
Jan 31st, 2015
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define pf printf
  3. #define sf scanf
  4. #define SIZE 1000000 // 10^6
  5.  
  6. using namespace std;
  7.  
  8.  
  9. vector<int> graph[SIZE+1];
  10. map<int , string> res;
  11. bool isValid = false;
  12. vector<int> adj;
  13.  
  14. int bfs(int src , int dest)
  15. {
  16. isValid = true ;
  17. int cnt = 1 ;
  18. map<int , int> vis;
  19. map<int , int> parent;
  20. //map<int , int> label;
  21. queue<int> q;
  22. parent[src] = 0;
  23. vis[src] = 1;
  24. //label[src] = 0;
  25. q.push(src);
  26. while(!q.empty())
  27. {
  28. int u = q.front();
  29. int v;
  30. int uLen = graph[u].size();
  31. for (int i = 0 ; i <uLen ; i++)
  32. {
  33. v = graph[u][i];
  34. if(!vis[v])
  35. {
  36. vis[v] = 1;
  37. parent[v] = u;
  38. //label[v] = label[u] + 1;
  39. q.push(v);
  40. cnt++;
  41. if (v == dest )
  42. {
  43. adj.push_back(dest);
  44. int p = parent[dest];
  45. for (int i = 0 ; i < cnt ; i++)
  46. {
  47. adj.push_back(p);
  48. p = parent[p];
  49. if(p == src)
  50. {
  51. adj.push_back(src);
  52. return 1;
  53. }
  54. }
  55. }
  56. }
  57. }
  58. q.pop();
  59. }
  60. return 0;
  61. }
  62.  
  63. int main ()
  64. {
  65. //freopen("in.txt" , "r" ,stdin);
  66. //freopen("out.txt" , "w" , stdout);
  67.  
  68. int edges;
  69. string src , dest;
  70. while(sf("%d",&edges) == 1)
  71. {
  72. if(isValid) { pf("\n"); isValid = false; }
  73. map<string,int> mp;
  74. int cnt = 0;
  75. for (int i = 0 ; i < edges ; i++)
  76. {
  77. cin >> src >> dest;
  78. if (mp.find(src) == mp.end()) {
  79. mp[src] = ++cnt;
  80. res[cnt] = src;
  81. }
  82. if (mp.find(dest) == mp.end()){
  83. mp[dest] = ++cnt;
  84. res[cnt] = dest;
  85. }
  86. int u = mp[src];
  87. int v = mp[dest];
  88. graph[u].push_back(v);
  89. graph[v].push_back(u);
  90. }
  91. cin >> src >> dest;
  92. if (mp.find(src) == mp.end()) {
  93. mp[src] = ++cnt;
  94. res[cnt] = src;
  95. }
  96. if (mp.find(dest) == mp.end()) {
  97. mp[dest] = ++cnt;
  98. res[cnt] = dest;
  99. }
  100.  
  101. int tmp = bfs(mp[src] , mp[dest]);
  102. if (src == dest)
  103. {
  104. cout << res[mp[src]] << " " << res[mp[dest]] << "\n";
  105. }
  106. else if(!tmp)
  107. {
  108. cout << "No route" << "\n";
  109. }
  110. else
  111. {
  112. reverse(adj.begin() , adj.end());
  113. for (int i = 0 ; i < adj.size()-1 ; i++)
  114. {
  115. int u = adj[i];
  116. int v = adj[i+1];
  117. cout << res[u] << " " << res[v] << "\n";
  118. }
  119. }
  120. memset(graph , 0 , sizeof(graph));
  121. res.clear();
  122. adj.clear();
  123. }
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement