当前位置: 首页 > news >正文

老鼠迷宫,汉诺塔,八皇后,回溯算法案例

  1. 老鼠迷宫
    public class MiGong{
    	public static void main(String[] args) {
    		//用二维数组表示墙,用1表示,8行7列
    		int arr[][] = new int[8][7];
    
    		
    		for(int i=0;i<8;i++){
    			for(int j=0;j<7;j++){
    				arr[i][j]= 0;
    			}
    		}
    				
    	
    		//第一行,第8行都设为1.
    		for(int i=0;i<8;i++){
    			if(i==0||i==7){
    				for(int j=0;j<7;j++){
    					arr[i][j] = 1;
    					
    				}
    			}
    			System.out.println();
    		}
    		//第一列,第7列都设为1
    		for(int j=0;j<7;j++){
    			if(j==0||j==6){
    				for(int i=0;i<8;i++){
    					arr[i][j]=1;
    				}
    			}
    		}
    		arr[3][2] = 1;
    		arr[2][2] = 1;
    		arr[3][1] = 1;
    
    
    		//创建对象
    		T mouse = new T();
    		mouse.findway(arr,1,1);
    
    
    
    		for(int i=0;i<8;i++){
    			for(int j=0;j<7;j++){
    				System.out.print(arr[i][j]+" ");
    			}
    			System.out.println();
    		}
    		
    		
    	}
    }
    
    class T{
    	//使用递归回溯的思想。
    	//1.创建一个findway方法找出迷宫路径
    	//2.找到返回true,没找到返回false
    	//3.arr就是二维数组,表示迷宫
    	//4.i,j是老鼠的位置,初始化为[1][1]
    	//5。规定二维数组各个值的含义,
    	//0 表示可以走,1 表示障碍物,2 表示可以走,3 表示走过但是走不通的思路
    	//6.当arr[6][5] = 2就说明找到通路,就可以结束,否则就继续找。
    	//找路策略 下--》右--》上--》左。
    	public boolean findway(int arr[][],int i,int j){
    		
    		if(arr[6][5]==2){
    			return true;
    		}else{
    			
    			if(arr[i][j]==0){//说明可以走
    				arr[i][j] = 2;//假定这个位置可以走通。
    				//找路策略 下--》右--》上--》左。
    				if(findway(arr,i+1,j)){
    					return true;
    				}else if(findway(arr,i,j+1)){
    					return true;
    				}else if(findway(arr,i-1,j)){
    					return true;
    				}else if(findway(arr,i,j-1)){
    					return true;
    				}else{
    					arr[i][j] = 3;
    					return false;
    				}
    			}else{ //arr[i][j] = 1,2,3;
    				return false;
    			}
    		}
    	}
    
    
    
    
    
    
    
    
    
    }
    
    
    
    

  2. 汉诺塔,记住思路
    public class HanoiTower{
    	public static void main(String[] args) {
    		T tower = new T();
    		tower.move(3,'A','B','C');
    		
    	}
    }
    
    class T{
    	//方法
    	//num 表示移动的个数,a,b,c分别表示A塔,B塔,C塔
    	public void move(int num,char a,char b,char c){
    		//如果只有一个盘num=1
    		if(num == 1){
    			System.out.println(a + "->"+ c);
    		}else{
    			//如果有多个盘,可以看成两个,最下面的和最上面的所有盘(num-1)
    			//1.先移动上面所有盘到b,借助c
    			move(num-1,a,c,b);
    			//2.把最下面的这个盘,移动到c
    			System.out.println(a+"->"+c);
    			//3.再把b塔的所有盘,移动到c,借助a
    			move(num-1,b,a,c);
    		}
    	}
    }

  3. 八皇后没做出来,哈哈哈

相关文章:

  • MATLAB :【12】手把手教你在Linux以命令行方式(静默方式/非图形化方式)安装MATLAB(正版)
  • 数据库MySQL/Navicat+商品购物系统+Java实现(超详细讲解)
  • 大文件分片上传的实现【前后台完整版】
  • Chatgpt 指令收集
  • 2022国赛14:2022国赛正式题域控制器的迁移
  • 【IAR工程】STM8S208RB基于ST标准库内部EEPROM使用
  • springcloud整合knike4j聚合微服务接口文档
  • 学会这些方法,扩展磁盘分区还不是轻轻松松?
  • Chat GPT和飞书机器人,真的有那么多联系嘛?
  • Pikachu登录爆破之token爆破解析
  • Spring Cloud Alibaba 应用如何平滑迁移至 IPv6?
  • 2816. 判断子序列(双指针)
  • 技术宅小伙:关于前端的那些你不知道的事
  • [Python] 常用运算符
  • ES6新语法
  • vue3数据懒加载 无限滚动加载分页列表
  • 如何选择理想的三相浪涌保护器?
  • Dockerfile自定义镜像
  • 中国密封空气阻尼器行业发展趋势及需求前景预测报告2023-2029年
  • Javaweb | 初识、servlet应用
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉