8月20日晚科大讯飞笔试,xdm帮看第三个为啥我只过了80%
我的思路是第一次得出的成功路径放到res,之后所有的成功路径如果更短就刷新res,但是似乎没有起作用,查了半天不知道哪儿错了。
ArrayList<Point> res = new ArrayList<>();
ArrayList<Point> temp = new ArrayList<>();
int[][] visited;
public ArrayList<Point> winMazeGift (int[][] maze) {
// write code here
visited = new int[maze.length][maze[0].length];
for(int x = 0; x < maze.length; x++) {
for(int y = 0; y < maze[0].length; y++) {
dfs(x, y, maze);
}
}
return res;
}
private void dfs(int x, int y, int[][] maze) {
// 非法
if(x < 0 || x >= maze.length) return;
if(y < 0 || y >= maze[0].length) return;
if(maze[x][y] == 1) return;
if(visited[x][y] == 1) return;
// 成功
if(maze[x][y] == 8) {
Point p = new Point(x, y);
temp.add(p);
if(res.size() == 0 || temp.size() < res.size()) {
res = new ArrayList<Point>(temp);
}
return;
}
// spread
temp.add(new Point(x, y));
visited[x][y] = 1;
dfs(x-1, y, maze);
dfs(x+1, y, maze);
dfs(x, y-1, maze);
dfs(x, y+1, maze);
temp.remove(temp.size()-1);
visited[x][y] = 0;
} #科大讯飞笔试#
