java 二维数组中遇到障碍B无法穿越,K的值代表可以通行,写一段代码判断能否从起点S到终点T
时间: 2023-07-16 10:12:39 浏览: 46
假设二维数组为`grid`,起点坐标为`(startX, startY)`,终点坐标为`(endX, endY)`,障碍物表示为字符'B',通行表示为字符'K'。以下是一个可能的解决方案:
```
public static boolean canReach(char[][] grid, int startX, int startY, int endX, int endY) {
// 判断起点和终点是否在数组范围内
if (startX < 0 || startX >= grid.length || startY < 0 || startY >= grid[0].length ||
endX < 0 || endX >= grid.length || endY < 0 || endY >= grid[0].length) {
return false;
}
// 判断起点和终点是否是障碍物
if (grid[startX][startY] == 'B' || grid[endX][endY] == 'B') {
return false;
}
// 如果起点和终点相同,直接返回true
if (startX == endX && startY == endY) {
return true;
}
// 将起点标记为已访问
grid[startX][startY] = 'X';
// 分别向上、下、左、右四个方向搜索
boolean canReach = false;
if (startX > 0 && grid[startX - 1][startY] == 'K') {
canReach = canReach || canReach(grid, startX - 1, startY, endX, endY);
}
if (startX < grid.length - 1 && grid[startX + 1][startY] == 'K') {
canReach = canReach || canReach(grid, startX + 1, startY, endX, endY);
}
if (startY > 0 && grid[startX][startY - 1] == 'K') {
canReach = canReach || canReach(grid, startX, startY - 1, endX, endY);
}
if (startY < grid[0].length - 1 && grid[startX][startY + 1] == 'K') {
canReach = canReach || canReach(grid, startX, startY + 1, endX, endY);
}
return canReach;
}
```
这个方法使用递归来搜索从起点到终点的路径。每次递归调用,都会检查当前位置是否是障碍物或已访问,然后递归调用四个方向中可行的方向,标记当前位置为已访问,最后返回是否能够到达终点。