华为机考第三题--迷宫路径(BFS)

本文记录了作者在华为机考中遇到的一道关于迷宫两点间最短路径的问题。作者最初尝试使用递归解决,但效果不佳,后采用广度优先搜索(BFS)方法,并详细解释了思路。BFS能确保找到首次到达终点的最短路径,作者对此有了更深入的理解。
摘要由CSDN通过智能技术生成

前言

昨天做了华为的机考,前两题挺简单的,不像是考察算法,这个机考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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值