博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构——使用递归回溯实现迷宫问题(Java代码实现)
阅读量:3962 次
发布时间:2019-05-24

本文共 1422 字,大约阅读时间需要 4 分钟。

思路分析

  1. 小球得到的路径,和程序设置的找路策略有关即:找路的上下左右的顺序相关
  2. 再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化
  3. 测试回溯现象

1.绘制地图

如下图所示:1表示墙,不能走。 0表示可以走的点。

在这里插入图片描述
使用一个二维数组进行构建地图。

// 先创建一个二维数组模拟迷宫int[][] map = new int[8][7];// 使用 1 表示墙// 上下都置为1for (int i = 0; i < 7; i++) {
map[0][i] = 1; map[7][i] = 1;}// 左右都置为1for (int i = 0; i < 8; i++) {
map[i][0] = 1; map[i][6] = 1;}// 设置栏板map[3][1] = 1;map[3][2] = 1;// 遍历数组for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " "); } System.out.println(" ");}

2.递归回溯的方法实现

随后定义一个寻找出路的方法,在方法当中给定地图,和初始位置。代码使用递归调用。

// i j 表示从哪个点开始// 找到路返回true,反之为false// 从[1][1] --> [6][5]// 1 表示墙,2表示通路,3表示走过这个点// 策略: 下-->右-->上-->左public static boolean setWay(int[][] map, int i, int j) {
if (map[6][5] == 2) {
// 目标点为2 表示找到出路 return true; } else {
if (map[i][j] == 0) {
// 该点还未走过 map[i][j] = 2; if (setWay(map, i + 1, j)) {
//向下走 return true; } else if (setWay(map, i, j + 1)) {
//向右走 return true; } else if (setWay(map, i - 1, j)) {
//向上走 return true; } else if (setWay(map, i, j - 1)) {
//向左走 return true; } else {
// 这条路是死路 map[i][j] = 3; return false; } } else {
// map[i][j]!=0 可能是 1 2 3 return false; }}}

详情如下所示:

在这里插入图片描述
3.测试方法

// 使用递归回溯setWay(map, 1, 1);System.out.println(" 找迷宫的出路 ");// 走过的路for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " "); } System.out.println(" ");}

在这里插入图片描述

转载地址:http://memzi.baihongyu.com/

你可能感兴趣的文章
C++连接CTP接口实现简单量化交易
查看>>
服务端使用c++实现websocket协议解析及通信
查看>>
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>
strstr函数和find函数的异同
查看>>
Java的反射
查看>>
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>