Advertisement
Nickpips

wang

Jul 6th, 2016
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. class node
  9. {
  10. public:
  11.     bool visited = false;
  12.     bool pass = false;
  13.  
  14.     vector<node*> adj;
  15. };
  16.  
  17. int main()
  18. {
  19.  
  20.     int r,c,h;
  21.     while (cin >> h >> r >> c && h != 0 && r != 0 && c != 0)
  22.     {
  23.         node nodes[32][32][32];
  24.  
  25.         vector<node*> q;
  26.  
  27.         int e[3];
  28.  
  29.         for (int i = 1; i <= h; i++) {
  30.             for (int j = 1; j <= r; j++) {
  31.                 string line;
  32.                 cin >> line;
  33.                 for (int k = 1; k <= c; k++) {
  34.  
  35.                     char ch = line.at(k - 1);
  36.                     if (ch != '#') {
  37.                         if (ch == '.') {
  38.                             nodes[i][j][k].pass = true;
  39.                         } else if (ch == 'S') {
  40.                             q.push_back(&nodes[i][j][k]);
  41.                             nodes[i][j][k].visited = true;
  42.                             nodes[i][j][k].pass = true;
  43.                         } else if (ch == 'E') {
  44.                             nodes[i][j][k].pass = true;
  45.                             e[0] = i;
  46.                             e[1] = j;
  47.                             e[2] = k;
  48.                         } else {
  49.                             cerr << "NOPE" << endl;
  50.                         }
  51.  
  52.                         if (nodes[i - 1][j][k].pass) {
  53.                             nodes[i - 1][j][k].adj.push_back(&nodes[i][j][k]);
  54.                             nodes[i][j][k].adj.push_back(&nodes[i - 1][j][k]);
  55.                         }
  56.                         if (nodes[i][j - 1][k].pass) {
  57.                             nodes[i][j - 1][k].adj.push_back(&nodes[i][j][k]);
  58.                             nodes[i][j][k].adj.push_back(&nodes[i][j - 1][k]);
  59.                         }
  60.                         if (nodes[i][j][k - 1].pass) {
  61.                             nodes[i][j][k - 1].adj.push_back(&nodes[i][j][k]);
  62.                             nodes[i][j][k].adj.push_back(&nodes[i][j][k - 1]);
  63.                         }
  64.                     }
  65.                 }
  66.             }
  67.         }
  68.  
  69.         int step = 0;
  70.         while (q.size() != 0 && !nodes[e[0]][e[1]][e[2]].visited) {
  71.             vector<node*> newq;
  72.             for (int i = 0; i < q.size(); i++) {
  73.                 node* u = q[i];
  74.                 for (int j = 0; j < u->adj.size(); j++) {
  75.                     node* v = u->adj[j];
  76.                     if (!v->visited) {
  77.                         newq.push_back(v);
  78.                         v->visited = true;
  79.                     }
  80.                 }
  81.             }
  82.  
  83.             q = newq;
  84.             step++;
  85.         }
  86.  
  87.         if (nodes[e[0]][e[1]][e[2]].visited) {
  88.             cout << "Escaped in " << step << " minute(s)." << endl;
  89.         } else {
  90.             cout << "Trapped!" << endl;
  91.         }
  92.     }
  93.  
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement