AOJ0104 Magical Tiles
問題リンク Magical Tiles
- 解法
現在地(x,y)をタイルの模様によって変化させ、'.'のマスに来ることができれば止まります。ループの判定は、「過去に訪れたことがあるタイルにまた訪れたらループである」ので、訪れたタイルにマークをつければいいと思います。また、H*W回を超えて移動を行ったらループであるとしてもいいかもしれません。
- ソース
import java.util.Scanner; //Magical Tiles public class AOJ0104 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true){ int h = sc.nextInt(); int w = sc.nextInt(); if(h==0&&w==0)break; boolean[][] visit = new boolean[h][w]; char[][] map = new char[h][w]; for(int i=0;i<h;i++)map[i]=sc.next().toCharArray(); int x = 0; int y = 0; boolean loop = false; boolean goal = false; while(!loop && !goal){ if(visit[y][x]){ loop = true; break; } visit[y][x] = true; switch(map[y][x]){ case '>': x++;break; case '<': x--;break; case '^': y--;break; case 'v': y++;break; case '.': goal = true;break; } } System.out.println(loop?"LOOP":x+" "+y); } } }