zoukankan      html  css  js  c++  java
  • 迷宫问题

    迷宫问题

    整体问题

    判断从起点能否走到终点,如果可以打印出来路径

    思路

    1.创建迷宫
    2.设置起点和终点
    3.如果走到终点退出递归
    4.如果这个点没走过,假设它可以走通,递归的对它的四个方向走,如果通就返回true,四个方向都不通就返回false
    5.如果这个点走过,就不能再走,直接返回false

    优化策略

    1.小球找到的路径与程序员设置的策略有关
    2.可以将各种不同的策略共4乘3乘2乘1种策略依次走一遍,求最短

    代码

    package recursion;
    
    public class Maze {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		//创建数组
    		//级别
    		int [][] map=new int[8][7];
    		//上下全部的置为1
    		for(int i=0;i<7;i++) {
    			map[0][i]=1;
    			map[7][i]=1;
    			
    		}
    		
    		//左右都置为1
    		for(int i=0;i<8;i++) {
    			map[i][0]=1;
    			map[i][6]=1;
    		}
    		
    		//设置挡板
    		map[3][1]=1;
    		map[3][2]=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();
    		}
    		//使用递归回溯给小球找路
    		boolean flag=setWay(map, 1, 1);
    		System.out.println(flag);
    		//输出新的地图,这个地图中就有小球走过的路
    		//标识过的地图,有通路就是2,没有通路就是3
    		for(int i=0;i<8;i++) {
    			for(int j=0;j<7;j++) {
    				System.out.print(map[i][j]+" ");
    			}
    			System.out.println();
    		}
    		
    	}
    	
    	//使用递归函数来给小球找路
    	//map表示对应的矩阵
    	//i,j表示从哪个位置开始找
    	//表示如果找到通路的话,就返回true,否则就返回false
    	//如果小球可以到map[6][5]位置,就说明通路已经找到,
    	//约定,当地图的(i,j)为0的时候,表示没有走过,1表示墙,2是通路,3是之前走过但是没有走通
    	//策略方法;下->右->上->左,如果走不通再结束
    	public static boolean setWay(int [][] map,int i,int j) {
    		if(map[6][5]==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 {//可能是1,2,或者3
    				return false;
    			}
    		}
    	
    	}
    	
    
    }
    
    
  • 相关阅读:
    spring ApplicationListener接口
    spring提供的几个常用可实现的接口
    dubbo源码解析(三) DubboInvoker
    Java生日计算年龄工具
    css实现右尖括号样式
    微信小程序支付开发之申请退款
    微信小程序picker组件
    java 获取用户ip
    spring boot 添加拦截器的简单实例(springBoot 2.x版本,添加拦截器,静态资源不可访问解决方法)
    JVM 组成以及各部分作用
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11644129.html
Copyright © 2011-2022 走看看