joh*_*ohn 5 java algorithm breadth-first-search microsoft-distributed-file-system data-structures
我正在处理下面的面试问题,我对如何在这里使用BFS搜索感到困惑.我对这里如何处理封锁感到困惑?
给定MxN矩阵找到到达给定目标小区的最短路径.机器人可以向上,向下,向左或向右移动.矩阵还在机器人无法通过的少数单元格中带有一组封锁.输出机器人到达目的地所需的最小移动次数.如果目标不可访问,则输出-1.假设封锁永远不会在起始单元格.
输入格式:第一行包含M和N矩阵的值.第二行包含机器人起始位置的单元格位置.第三行包含目标的单元位置.第四行及其后面的行将包含封锁的位置.以下示例仅包含(2,2)处的机器人无法通过的一个封锁.以下是输入:
3 3
1 1
3 3
2 2
Run Code Online (Sandbox Code Playgroud)
对于上述输入,输出应为4.
以下是我的开始,但在进行BFS搜索时如何处理封锁问题:
public static void main(String args[] ) throws Exception {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
int startX = sc.nextInt();
int startY = sc.nextInt();
int destinationX = sc.nextInt();
int destinationY = sc.nextInt();
while (sc.hasNext()) {
int blockedX = sc.nextInt();
int blockedY = sc.nextInt();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以简单地将网格视为图形:每个单元格都与其四个邻居相连(如果位于边缘则更少),不包括任何封锁。使用你的例子:
\n\n 1 2 3\n1 \xe2\x80\xa2 \xe2\x80\xa2 \xe2\x80\xa2\n2 \xe2\x80\xa2 x \xe2\x80\xa2\n3 \xe2\x80\xa2 \xe2\x80\xa2 \xe2\x80\xa2\nRun Code Online (Sandbox Code Playgroud)\n\n我们有图表(使用(行,列)表示法):
\n\n(1,1) <-> (1,2)\n(2,1) <-> (3,1)\n(3,1) <-> (2,3)\n(2,3) <-> (3,3)\n(3,3) <-> (3,2)\n(3,2) <-> (3,1)\n(3,1) <-> (2,1)\n(2,1) <-> (1,1)\nRun Code Online (Sandbox Code Playgroud)\n\n其中所有边长度均为 1。现在您可以从起始节点应用标准BFS,直到到达目标节点,从而跟踪您访问的节点。在伪代码中:
\n\n| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |