Advertisement
Kaidul

762 We ship cheap

May 10th, 2013
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <list>
  14. #include <map>
  15. #include <memory>
  16. #include <queue>
  17. #include <set>
  18. #include <sstream>
  19. #include <stack>
  20. #include <string>
  21. #include <utility>
  22. #include <vector>
  23. #include <iomanip>
  24.  
  25. using namespace std;
  26.  
  27. #define REP(i,n) for(__typeof(n) i=0; i<(n); i++)
  28. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  29. #define Fore(it, x) for(typeof (x.begin()) it = x.begin(); it != x.end (); it++)
  30. #define Empty(queue) while(!queue.empty())
  31. #define RESET(t,value) memset((t), value, sizeof(t))
  32. typedef long long int64;
  33. typedef long double d64;
  34. #define READ(f) freopen(f, "r", stdin)
  35. #define WRITE(f) freopen(f, "w", stdout)
  36. #define PI acos(-1.0)
  37. #define INF (1<<30)
  38. #define eps 1e-8
  39. #define i64 long long
  40. #define pb push_back
  41. #define ppb pop_back
  42. #define pii pair<double,double>
  43. #define G struct node
  44.  
  45. #define Max 700
  46.  
  47. vector <int> adj[Max];
  48. int visited[Max], dis[Max+1];
  49. int par[Max];
  50. stack <int> st;
  51. queue <int> q;
  52. map <string, int> city;
  53.  
  54. void re_arrange(int src, int des) {
  55.     if(par[des] == src) {
  56.         st.push(src);
  57.         //return;
  58.     } else if(par[des] == des) {
  59.         cout << "No route\n";
  60.         st.empty();
  61.     } else {
  62.         st.push(par[des]);
  63.         re_arrange(src, par[des]);
  64.     }
  65. }
  66.  
  67. void find_path(int src, int des) {
  68.     re_arrange(src, des);
  69.     string str[Max];
  70.     Fore (it, city) str[(*it).second]=(*it).first;
  71.     while(!st.empty()) {
  72.         int u = st.top();
  73.         cout << str[u] << " ";
  74.         st.pop();
  75.         if(!st.empty()) {
  76.             int v = st.top();
  77.             cout << str[v] << endl;
  78.         } else cout << str[des] << "\n";
  79.     }
  80. }
  81.  
  82. void BFS(int src, int des) {
  83.     q.push(src);
  84.     visited[src] = 1;
  85.     while(!q.empty()) {
  86.         int pop = q.front(), temp;
  87.         REP(i, adj[pop].size()) {
  88.             temp = adj[pop][i];
  89.             if(!visited[temp]) {
  90.                 visited[temp] = 1;
  91.                 q.push(temp);
  92.                 par[temp] = pop;
  93.                 if(temp == des) return;
  94.             }
  95.         }
  96.         q.pop();
  97.     }
  98. }
  99.  
  100. void reset() {
  101.     city.clear();
  102.     q = queue <int> ();
  103.     RESET(visited, 0);
  104.     REP(i, Max) {
  105.         adj[i].clear();
  106.         par[i] = i;
  107.     }
  108. }
  109. int main() {
  110.     READ("input.txt");
  111.     string first, second, src_city, des_city;
  112.     int e, src, des, index;
  113.     bool blank = false;
  114.     while(cin >> e) {
  115.         index = 1;
  116.         if(blank) cout << "\n";
  117.         blank = true;
  118.         REP(i, e) {
  119.             cin >> first >> second;
  120.             if (!city[first]) city[first] = index++;
  121.             if (!city[second]) city[second] = index++;
  122.             adj[city[first]].pb(city[second]);
  123.             adj[city[second]].pb(city[first]);
  124.         }
  125.         cin >> src_city >> des_city;
  126.         BFS(city[src_city], city[des_city]);
  127.         if ( !city [src_city] || !city [des_city] || !visited[city [des_city]] )
  128.             printf ("No route\n");
  129.         else find_path(city[src_city], city[des_city]);
  130.  
  131.         reset();
  132.     }
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement