java编程题——小老鼠走迷宫

文章介绍了一个使用递归算法解决迷宫问题的Java程序。通过二维数组表示地图,0表示可通行,1表示障碍,2和3分别表示已走过和无法通行的路径。程序根据出口相对于小老鼠的位置确定搜索顺序,从起点开始尝试各个方向,遇到死路则回溯。示例代码展示了一个简单的迷宫和有死路的迷宫的处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求和问题:如图小老鼠是三角形,小老鼠需要从起始位置寻找一条通路到达五角星位置,从而走出迷宫,要求用代码实现,找出一条正确的路。

 具体思路:用递归的方法来解决。整个地图可用一个二维数组表示,用0代表可走的格子(图中白格),1代表障碍物(图中黑格),2代表小老鼠走过的格子,3代表小老鼠走过而不能走通的格子。小老鼠走到那一格,就先将此格设为2,再按顺序判断四个方向是否有路可走,(而这个顺序就通过出口对于小老鼠的相对位置来确定),没有路走就将此格设为3,然后回溯上一步,如果还是没有可以走的格子(0),就一直返回到四周有可以走的格子,如果返回到了起点还是没有可走的路,就退出,不能到达五角星位置。

小老鼠的找路顺序:比如出口再小老鼠的右下方,就按:下->右->上->左,如果出口在小老鼠右上方,就按:右->上->左->下,方向有很多种,关键是要朝着出口方向找路。

现在我们先将问题简单化,走如图以下的迷宫:

再设置有死路的:

代码如下:

//=====老鼠走迷宫问题==========
public class test{
 	public static void main(String[] args){
 		//设置地图
 		int arr[][] = new int[8][8];
 		for(int i = 0; i < 8; i++)
 		{
 			for(int j = 0; j < 8; j++)
 			{
 				if(i == 0 || j == 0|| i == 7 || j == 7)
 				{
 					arr[i][j] = 1; //四周围上一层障碍
 				}
 			}
 		}
 		arr[2][1] = 1;
 		arr[2][2] = 1;
 		arr[2][4] = 1;
 		arr[3][4] = 1;
 		arr[4][4] = 1;
 		arr[4][3] = 1;
 		arr[4][2] = 1;
 		arr[4][1] = 1;
 		AA obj = new AA();
 		obj.findWay(arr,1,1);
 		//打印
 		for(int i = 0; i < 8; i++)
 		{
 			for(int j = 0; j < 8; j++)
 			{
 				System.out.print(arr[i][j] + " ");
 			}
 			System.out.println();
 		}
 	}
}

class AA{
	public boolean findWay(int map[][], int i, int j){
    //如果发现五角星位置为2,找到出口
	if(map[6][6] == 2)
	{
		return true;
	}
	else
	{
		if(map[i][j] == 0)
		{
			map[i][j] = 2;
			if(findWay(map, i+1, j))//向下
			{
				return true;
			}
			else if(findWay(map,i,j+1))//向右
			{
				return true;
			}
			else if(findWay(map,i-1,j))//向上
			{
				return true;
			}
			else if(findWay(map,i,j-1))//向左
			{
				return true;
			}
			else //发现死路之后,上面四个都不能走,执行以下语句
			{
				map[i][j] = 3;
				return false; 
			}
		}
		else
		{
			return false; //到这发现是死路
		}
	}
}
}

运行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值