範例程式碼 uva118

//uva118
#include <iostream>

using namespace std;

int main() {
  bool scent[55][55] = {0};
  int bound_x, bound_y;
  int init_x, init_y;
  char init_ori;
  int curr_x, curr_y, curr_ori = 0;
  bool if_lost = false;
  string ins;

  cin >> bound_x >> bound_y;
  while (cin >> init_x >> init_y >> init_ori) {
    cin >> ins;
    curr_x = init_x;
    curr_y = init_y;
    if_lost = false;
    switch (init_ori) {
    case 'N':
      curr_ori = 0;
      break;
    case 'E':
      curr_ori = 1;
      break;
    case 'S':
      curr_ori = 2;
      break;
    case 'W':
      curr_ori = 3;
      break;
    }

    for (auto i : ins) {
      int next_x = curr_x, next_y = curr_y;

      if (i == 'L') {
        curr_ori = (curr_ori + 3) % 4;
      } else if (i == 'R') {
        curr_ori = (curr_ori + 1) % 4;
      } else if (i == 'F') {
        switch (curr_ori) {
        case 0:
          next_y = curr_y + 1;
          break;
        case 1:
          next_x = curr_x + 1;
          break;
        case 2:
          next_y = curr_y - 1;
          break;
        case 3:
          next_x = curr_x - 1;
          break;
        }
        if (next_x < 0 || next_x > bound_x || next_y < 0 || next_y > bound_y) {
          if (scent[curr_x][curr_y])
            continue;
          else {
            if_lost = true;
            scent[curr_x][curr_y] = true;
            break;
          }
        }
        curr_x = next_x;
        curr_y = next_y;
      }
    }
    cout << curr_x << " " << curr_y << " ";
    switch (curr_ori) {
    case 0:
      cout << "N";
      break;
    case 1:
      cout << "E";
      break;
    case 2:
      cout << "S";
      break;
    case 3:
      cout << "W";
      break;
    }
    if (if_lost)
      cout << " LOST";
    cout << endl;
  }
  return 0;
}