Java—递归(迷宫问题)适合小白

阅读: 评论:0

Java—递归(迷宫问题)适合小白

Java—递归(迷宫问题)适合小白

迷宫问题

一、问题描述:

有一个8 ×7的迷宫,如图所示,现在有一个小球需要从左上角运动到右下角,请找出一条路。

地图描述:红色区域为墙,小球不能通过,小球只能在白色区域移动

二、问题解决

在这个问题中,我们用递归来解决,起始位置为第一行第一列,小球每次移动可以向上、左、下、右 这四个方向移动,并且这四个方向等可能,我们可以制定小球移动策略,这里我规定小球 以 右-上-左-下 的策略移动,即小球先向有移动,当向右不能在移动之后,小球再向上移动,依此类推、、、
我们先将地图数字化,转化为一个8×7的数组:
1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 1 0 0 1
1 1 1 0 0 0 1
1 0 0 0 0 0 1
1 0 1 0 1 1 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1

1:表示地图中的墙,0表示地图中小球可以走的白色区域

为了分清小球在地图中那些地方可以走,那些地方不可以走,那些地方走过,我们须得做一个约定,便于识别。值得注意的是,“走过” 又有两种情况,即、走到这个地方,还可以继续走(走得通);也有另一种情况,走到死胡同(走不通),所以我们在做约定的时候要分两种情况。

约定:

  1. 小球不能走的地方,即墙,我们在数组中用 ” 1 “ 来标识;
  2. 小球可以走的地方,即白色区域,我们在数组中用 ” 0 “ 来标识;
  3. 小球走的通的地方,我们在数组中用 ” 2 “ 来标识;
  4. 小球能走,但走不通的地方,我们在数组中用 ” 3 “ 来标识;

代码:

package recursion;public class MiGong {public static void main(String[] args) {//		要求:从第一行第一列出发到达右下角
//		1.创建地图
//		2.制定策略:右-上-左-下
//		3.地图说明:0表示可以走,1表示墙,2表示通路,3表示走过但不通//		创建一个二维数组用于模拟地图int[][] Map = new int[8][7];
//		初始化地图
//		地图中的挡板Map[2][3] = 1;Map[3][1] = 1;Map[3][2] = 1;Map[5][2] = 1;Map[5][4] = 1;Map[5][5] = 1;
//		做地图中的上下墙for (int i = 0; i < 7; i++) {Map[0][i] = 1;Map[7][i] = 1;}
//		做地图中的左右墙for (int i = 0; i < 8; i++) {Map[i][0] = 1;Map[i][6] = 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();}Recursion(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();}}//	递归回溯寻找通路public static boolean Recursion(int Map[][], int i, int j) {if (Map[6][5] == 2) {// 到达右下角即返回true 退出return true;} else if (Map[i][j] == 0) {Map[i][j] = 2;// 假定此时可以走通// 策略:右-上-左-下if (Recursion(Map, i, j + 1)) {// 向右走return true;} else if (Recursion(Map, i + 1, j)) {// 向上走return true;} else if (Recursion(Map, i, j - 1)) {// 向左走return true;} else if (Recursion(Map, i - 1, j)) {// 向下走return true;} else {Map[i][j] = 3;// 走不通,将其值设为3,表示走过但走不通return false;}} else {// Map[i][j]不为0,即为1:墙,2:走过的路能走通,3:走过的路不能走通return false;// 能走的都走完了 即 没有可走的了}}}

代码执行结果

当地图为图2所示时,运行结果为:(这里就不给代码了,只需将二维数组中的第一行第二列赋值为 1 就可以了)

小结:这里我们是通过递归来解决的迷宫问题,我们制定了右-上-左-下的小球移动策略,大家可以试一试改变策略之后,小球移动的轨迹又是怎么样的~~~~

本文发布于:2024-02-01 21:29:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679414439530.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:递归   迷宫   适合   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23