java - 使用堆栈(Java)在迷宫中的老鼠
问题描述
给定一个二维字符数组,从给定点开始,我们必须找到一个“出口”,即给定矩阵周边的“0”。如果找到路径,程序将返回 true,稍后我在 main 方法中运行它时会打印一条消息。我们只能向上、向左、向下或向右移动到附近的“0”。我已经尝试过完成这项工作,但是出现内存错误,这可能意味着我陷入了无限循环。我尝试使用我使用 Nodes 制作的 Stack 来实现这个项目,我也使用泛型实现了自己,如下所示:例如
StringStackImpl<int[][]> s = new StringStackImpl<>();
在不同的 .java 文件中。这些工作正常。我试图将字符的坐标存储在矩阵中,如下所示:
StringStackImpl<int[]> s = new StringStackImpl<>();
s.push(new int[]{i, j});
这是我的代码:
private static boolean hasExit(char[][] maze, int n, int m, int i, int j) {
int d = -1;
boolean[][] visited = new boolean[n][m];
for (int a = 0; a < visited.length; a++) {
for (int b = 0; b < (visited[a]).length; b++) {
visited[a][b] = false;
}
}
StringStackImpl<int[]> s = new StringStackImpl<>();
s.push(new int[]{i, j});
while (!(s.isEmpty())) {
int[] temp = s.peek();
d += 1;
i = temp[0];
j = temp[1];
if (((i == 0) || (i == n-1) || (j == 0) || (j == m-1)) && (maze[i][j] == '0')) {
return true;
}
if (d == 0) {
if ((i-1 >= 0) && (maze[i-1][j] == '0') && !(visited[i-1][j])) {
visited[i-1][j] = true;
s.push(new int[]{i-1, j});
d = -1;
}
}
else if (d == 1) {
if ((j-1 >= 0) && (maze[i][j-1] == '0') && !(visited[i][j-1])) {
visited[i][j-1] = true;
s.push(new int[]{i, j-1});
d = -1;
}
}
else if (d == 2) {
if ((i+1 < n) && (maze[i+1][j] == '0') && !(visited[i+1][j])) {
visited[i+1][j] = true;
s.push(new int[]{i+1, j});
d = -1;
}
}
else if (d == 3) {
if ((j+1 < m) && (maze[i][j+1] == '0') && !(visited[i][j+1])) {
visited[i][j+1] = true;
s.push(new int[]{i, j+1});
d = -1;
}
}
else {
s.pop();
d = -1;
}
}
return false;
}
}
编辑:它现在可以工作了,多亏了kendavidson!<3
解决方案
乍一看,相信您对 StringStackImpl 的看法,我认为您应该只d = -1;
在最后一个else
. 现在你总是把它设置回-1,所以你只检查d == 0
条件。据我了解,d
方向是否可能,所以应该从0
到3
?
除此之外,花一些时间给你的变量起有意义的名字:
visited[i][j]
当节点还没有被访问时是真的[i][j]
......这是违反直觉的,并且不会帮助其他人或你自己理解你的代码。
您是否被迫使用char
fori
和j
?它确实倾向于使代码变得冗长乏味。
推荐阅读
- vba - 隐藏要通过邮件发送的列 excel vba
- cordova - Ionic - 内联日期时间选择器
- javascript - ECMAScript 对象扩展/休息 - 一次分配给多个属性
- ios - 强制 iOS 应用使用私有 API 在前台打开
- javascript - 仅当在循环内调用类方法时,Javascript 执行中断并显示 TypeError 消息“无法读取未定义的属性 'refcount'”
- python - Kivy : Apply function variables to Button Text
- tensorflow - 用于对象检测的 Tensorboard eval.py IOU
- python - API Gateway 中的 AWS Lambda 集成响应 - {"message": "Internal server error"}
- python - Python:从字典列表中的值生成特定组合以进行时间表规划
- r - 在 SQL Server 中结合 dbplyr 和 case_when