第 6 章 递归(2)(迷宫问题)

6.6.1 迷宫问题

在这里插入图片描述

6.6.2 代码实现

package pers.th.d6_recursion;/*** 递归-迷宫问题*/
public class MiGong {public static void main(String[] args) {//先创建一个二维数组,模拟迷宫//地图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 < 7; i++) {map[i][0] = 1;map[i][6] = 1;}//设置挡板,1 表示map[3][1] = 1;map[3][2] = 1;//输出地图System.out.println("地图的情况");for (int[] row : map) {for (int i : row) {System.out.print(i + " ");}System.out.println();}setWay(map, 1, 1);
//        setWay2(map, 1, 1);//输出新的地图,小球走过,并标识过的递归System.out.println("小球走过,并标识过的递归");for (int[] row : map) {for (int i : row) {System.out.print(i + " ");}System.out.println();}}//使用递归回溯来给小球找路//说明//1.map 表示地图//2. i,j 表示从地图的那个位置开始出发(1,1)//3.如果小球能到map[6][5]位置,则说明通路找到//4.约定:当map[i][j]为0,表示该点没有走过;当为1,表示墙;2 表示通路可以走;3 表示该点已经走过,但是走不通;//5.在走迷宫时,需要确定一个策略(方法)下-右-上-左,如果该点走不通,再回溯/*** @param map 表示地图* @param i   表示从地图的那个位置开始出发* @param j* @return 如果找到通路,就返回true,否则返回false*/public static boolean setWay(int[][] map, int i, int j) {if (map[6][5] == 2) {//通路已经找到 okreturn 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;}} else {//如果map[i][j] != 0,可能是 1,2,3return false;}}return true;}//修改找路的策略 上-右-下-左public static boolean setWay2(int[][] map, int i, int j) {if (map[6][5] == 2) {//通路已经找到 okreturn true;} else {if (map[i][j] == 0) {//如果当前这个点还没有走过//按照策略 上-右-下-左map[i][j] = 2;//假定该点是可以走通.if (setWay2(map, i - 1, j)) {//向上走return true;} else if (setWay2(map, i, j + 1)) {//向右走return true;} else if (setWay2(map, i + 1, j)) {//向下走return true;} else if (setWay2(map, i, j - 1)) {//向左走return true;} else {//说明该点是走不通,是死路map[i][j] = 3;}} else {//如果map[i][j] != 0,可能是 1,2,3return false;}}return true;}
}

调用setWay()方法:

地图的情况
1 1 1 1 1 1 1 
1 0 0 0 0 0 1 
1 0 0 0 0 0 1 
1 1 1 0 0 0 1 
1 0 0 0 0 0 1 
1 0 0 0 0 0 1 
1 0 0 0 0 0 1 
1 1 1 1 1 1 1 
小球走过,并标识过的递归
1 1 1 1 1 1 1 
1 2 0 0 0 0 1 
1 2 2 2 0 0 1 
1 1 1 2 0 0 1 
1 0 0 2 0 0 1 
1 0 0 2 0 0 1 
1 0 0 2 2 2 1 
1 1 1 1 1 1 1 

调用setWay2()方法:

地图的情况
1 1 1 1 1 1 1 
1 0 0 0 0 0 1 
1 0 0 0 0 0 1 
1 1 1 0 0 0 1 
1 0 0 0 0 0 1 
1 0 0 0 0 0 1 
1 0 0 0 0 0 1 
1 1 1 1 1 1 1 
小球走过,并标识过的递归
1 1 1 1 1 1 1 
1 2 2 2 2 2 1 
1 0 0 0 0 2 1 
1 1 1 0 0 2 1 
1 0 0 0 0 2 1 
1 0 0 0 0 2 1 
1 0 0 0 0 2 1 
1 1 1 1 1 1 1 

6.6.3 对迷宫问题的讨论

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url "http://userservice/user/" order.getUserId(); 代码可读性差&#xff0c;编码体验不统一参数复杂的url难以维护 所以我们大力推出我们今天的主角--Fegin Feign是…

燃尽图、甘特图、鱼骨图

燃尽图、甘特图、鱼骨图 1. 燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作的一种可视化表示。燃尽图有一个Y轴&#xff08;工作&#xff09;和X轴&#xff08;时间&#xff09;。理想情况下&#xff0c;该图表是一个向下…

NAS绝对安全吗?文件会不会泄露或被删除?

NAS&#xff08;Network Attached Storage&#xff09;并非绝对安全&#xff0c;因为任何系统都存在潜在的风险和漏洞。以下是一些可能导致文件泄露或被删除的情况&#xff1a; 1. 物理安全&#xff1a;如果未采取适当的物理安全措施&#xff0c;例如未将NAS设备放置在安全环境…

leetcode 121. 买卖股票的最佳时机

2023.8.20 本题用dp算法做&#xff0c;dp[i]的含义&#xff1a;前 i1天能获得的最大利润。 然后每次循环时需要维护一个最小值min_num &#xff1a;即 i1天中股票的最低价。剩下的步骤都很常规&#xff0c;代码如下&#xff1a; 一维dp&#xff1a; class Solution { public:…

使用 PyTorch 进行高效图像分割:第 2 部分

一、说明 这是由 4 部分组成的系列的第二部分&#xff0c;旨在使用 PyTorch 中的深度学习技术从头开始逐步实现图像分割。本部分将重点介绍如何实现基线图像分割卷积神经网络&#xff08;CNN&#xff09;模型。 图 1&#xff1a;使用 CNN 运行图像分割的结果。按从上到下的顺序…

【HCIP】04.VRRP与BFD

VRRP VRRP基本概念 VRRP路由器 运行VRRP协议的路由器&#xff0c;VRRP是配置在路由器的接口上的&#xff0c;而且也是基于接口来工作的。 VRID 一个VRRP组由多台协同工作的路由器&#xff08;的接口&#xff09;组成&#xff0c;使用相同的VRID&#xff08;Virtual Router…

我与GPT-4的对话——————python networkx库的学习

用户: 你好&#xff0c;GPT-4。我最近在研究Python的高级算法&#xff0c;特别是关于图论和动态规划方面的内容。你能给我一些建议吗&#xff1f; GPT-4: 当然可以。图论和动态规划都是计算机科学中非常重要的领域。在Python中&#xff0c;有很多库和工具可以帮助你更好地理解…

VR数字工厂多元化展现,打造数字企业工厂名片

5G时代&#xff0c;各种营销都在走数字化的路子&#xff0c;VR数字工厂用VR赋能工厂数字升级&#xff0c;将企业环境、工厂生产、产品研发、质检运输等流程&#xff0c;无死角720度的展示在客户面前&#xff0c;不仅可以提升自身企业的实力&#xff0c;还可以提高客户的信任感。…

如何在Java实现TCP方式发送和接收Socket消息(多线程模式)

目录 导言&#xff1a;正文&#xff1a;1. 创建Server端&#xff1a;2. 创建Client端&#xff1a;3. 多线程模式&#xff1a; 代码示例Server端代码示例&#xff1a;Client端代码示例&#xff1a;同步模式发送TCP消息异步模式 结论&#xff1a; 导言&#xff1a; 在Java编程中…

MySQL 和 MariaDB 版本管理的历史背景及差异

在本文中&#xff0c;我们将探讨 MySQL 和 MariaDB 服务生命周期和版本管理方式两个方面目前的状况及相关历史背景。 作者&#xff1a;Peter Zaitsev 本文来源&#xff1a;Percona 官网博客 爱可生开源社区出品。 需要说明的是 MySQL 和 MariaD B都有社区版和企业版。对于 MyS…

vue3自定义指令防止表单重复提交

可以设置在某个事件段内不允许重复提交&#xff1b;或者点击提交后设置提交flag&#xff0c;flag为true则不能再次提交 <template><div><h1>防止表单重复提交</h1><button click"submitForm" v-throttle>提交</button></di…

SpringBoot 的 RedisTemplate、Redisson

一、Jedis、Lettuce、Redisson的简介 优先使用Lettuce&#xff0c; 需要分布式锁&#xff0c;分布式集合等分布式的高级特性&#xff0c;添加Redisson结合使用。 对于高并发&#xff0c;1000/s的并发&#xff0c;数据库可能由行锁变成表锁&#xff0c;性能下降会厉害。 1.1、…

再JAVA中如何使用qsort对类进行排序?

目录 结论&#xff1a; 解析&#xff1a; 结论&#xff1a; import java.util.Arrays;class Person implements Comparable<Person>{public String name;public int age;public Person(String name, int age) {this.name name;this.age age;}Overridepublic Stri…

[保研/考研机试] KY11 二叉树遍历 清华大学复试上机题 C++实现

题目链接&#xff1a; 二叉树遍历_牛客题霸_牛客网编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/43719512169254700747…

机器学习笔记之优化算法(十五)Baillon Haddad Theorem简单认识

机器学习笔记之优化算法——Baillon Haddad Theorem简单认识 引言 Baillon Haddad Theorem \text{Baillon Haddad Theorem} Baillon Haddad Theorem简单认识证明过程证明&#xff1a;条件 1 ⇒ 1 \Rightarrow 1⇒ 条件 2 2 2证明&#xff1a;条件 3 ⇒ 3 \Rightarrow 3⇒条件 1…

css3+js 画出爱心特效

要使用CSS3和JavaScript绘制爱心特效&#xff0c;可以使用CSS3的动画和过渡效果来创建爱心的形状&#xff0c;并使用JavaScript来控制动画的触发和交互。以下是一个简单的示例代码&#xff1a; HTML: <div class"heart"></div> <button onclick&quo…

玩转单元测试之gmock

引言 前文我们学习了gtest相关的使用&#xff0c;单靠gtest&#xff0c;有些场景仍然无法进行测试&#xff0c;因此就诞生了gmock。 gmock快速入门 在引入gtest时&#xff0c;gmock也同样引入了&#xff0c;因此只需要在编译时加上合适的编译选项即可&#xff0c;注意不同版…

算法通关村十一关 | 位运算实现加法和乘法

1.位实现加法和乘法 在计算机中&#xff0c;位运算的效率要比加减乘除的效率更高&#xff0c;因此在高性能软件中源码中大量使用&#xff0c;计算机里各种运算基本上都是位运算。 学习下面内容之前建议先学习位运算规则&#xff1a;算法通关村十一关 | 位运算的规则_我爱学算…

【MaxKey对接一】对接gitlab的oauth登录

MaxKey的Oauth过程 引导进入 GET http://{{maxKey_host}}/sign/authz/oauth/v20/authorize?client_idYOUR_CLIENT_ID&response_typecode&redirect_uriYOUR_REGISTERED_REDIRECT_URI 登录后回调地址 YOUR_REGISTERED_REDIRECT_URI/?code{{code}} 换取Access Token GET…

winform使用usercontrol 构建了一个复杂的列表,列表速度慢该如何优化?

当使用 WinForms 构建复杂的列表时&#xff0c;可能会面临性能问题&#xff0c;特别是在数据量大或 UI 复杂的情况下。以下是一些优化策略&#xff0c;可以帮助您改善列表的性能&#xff1a; 1. **虚拟模式 (Virtual Mode)**&#xff1a;对于大型数据集&#xff0c;考虑使用虚…