AOJ_0104 Magical Tiles
3月になった。そろそろ入学試験というものがあるらしい。
問題
解法
タイルにかかれた指示どおりに移動をシミュレーションをしていけばいい。
ループを検出するためにすでに訪れたタイルを記録しておかなければならない。
過去に一度でも訪れた場所に再び来れば、ループが存在していることになる。
#include <cstdio> using namespace std; const int MAX_HW = 100; int H, W; char room[MAX_HW + 1][MAX_HW + 1]; bool used[MAX_HW + 1][MAX_HW + 1]; int ansh, answ; bool solve(int h, int w){ if(used[h][w]) return false; if(room[h][w] == '.'){ ansh= h; answ = w; return true; } used[h][w] = true; char t = room[h][w]; if(t == '^') h--; if(t == 'v') h++; if(t == '>') w++; if(t == '<') w--; return solve(h, w); } int main(){ char c; while(scanf("%d %d", &H, &W)&&H&&W){ for(int i = 0; i < H; i++){ scanf("%c", &c); for(int j = 0; j < W; j++){ used[i][j] = false; scanf("%c", &room[i][j]); } } if(solve(0,0)) printf("%d %d\n", answ, ansh); else printf("LOOP\n"); } return 0; }