前言
昨天做了华为的机考,前两题挺简单的,不像是考察算法,这个机考600分,100分及格,感觉像是送分题,这里不做详述,第三题就是迷宫两点间的最短路径,刚开始刷题,没见过,想着用递归,拿着他的测试样本怼递归,只通过了20%,参考了网上的[迷宫路径],学习了一下并做个记录。
Input:
2,2 0,0 2,2 3 0,1 2,0 2,1
输入详解:
(2,2) 表示迷宫的长宽, (0,0)表示起点A,(2,2)表示终点B, 3 表示障碍的个数,后面的(1,2) (2,0) (2,1)表示障碍坐标,A可以上下左右移动,不能通过有障碍的坐标,找到达到B点的路径并打印
Output:
[0,0][1,0][1,1][1,2][2,2]
思路
用广度优先遍历(借助队列)实现,需要一个数据结构保存当前位置的坐标信息(x,y),前一位置的信息pre。就是最短的感觉这个解法只是找到了第一次到达终点的路径,怎么保证他就是最短路径还有待学习,此处存疑 ,所以整个过程就先看代码理解一下吧。补充:依据BFS特性,第一次到达终点时的路径就是最短路径。前两天还不会的东西,去面试路上听大佬们讲讲,现在就有点理解了,多多笔试面试吧,越菜越要去,迎头赶上吧!
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
/**
* @author jinhuajian
* @data 2019年1月7日---下午7:44:03
* @blog https://me.csdn.net/qq_37119939
*/
class Node {
int x, y, dis;
Node pre;
public Node(int x, int y, int dis, Node pre) {
this.x = x;
this.y = y;
this.dis = dis;
this.pre = pre;
}
}
public class main3_1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String[] arr = s.split(" ");
// System.out.println(arr[1]);
int row = process(arr