/**
- This reference program is provided by @jiuzhang.com
- Copyright is reserved. Please indicate the source for forwarding
/
//參考答案
public class Solution {
/*- @param map: the map
- @return: can you reach the endpoint
*/
public boolean reachEndpoint(int[][] map) {
// Write your code here
int n = map.length;
int m = map[0].length;
if (n == 0 || m == 0) {
return false;
}
Queue q = new LinkedList<>();
boolean[][] vis = new boolean[n][m];
int[] dx = {0,1,0,-1};
int[] dy = {1,0,-1,0};
q.offer(0);
vis[0][0] = true;
while (!q.isEmpty()) {
int cur = q.poll();
int curx = cur / m;
int cury = cur % m;
for (int i = 0; i < 4; i++) {
int nx = curx + dx[i];
int ny = cury + dy[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= m || vis[nx][ny] || map[nx][ny] == 0) {
continue;
}
if (map[nx][ny] == 9) {
return true;
}
q.offer(nx * m + ny);
vis[nx][ny] = true;
}
}
return false;
}
}