java实现迷宫问题--算法篇

java实现迷宫问题

方向上有一些问题,应该是递归出现的问题,没有解决

package athu; import java.util.Scanner; import org.junit.jupiter.api.Test; /** * 迷宫问题的java实现 * @author * */ public class Maze { final static int m=2,n=2; //四个方向的移动表 int[][] move= {{-1,0,'N'},{0,1,'E'},{1,0,'S'},{0,-1,'W'}}; //访问标记数组 int[][] mark=new int[m+2][n+2]; char dir=0; @Test public void test() { int p,q; Scanner scanner=null; //迷宫定义 int[][] maze=new int[m+2][n+2]; //输入迷宫数据 for(int i=0;i<m+2;i++) { for(int j=0;j<n+2;j++) { scanner=new Scanner(System.in); maze[i][j]=scanner.nextInt(); } } System.out.println("请输入出口坐标:"); p=scanner.nextInt(); q=scanner.nextInt(); //初始化标记数组 for(int i=0;i<m+2;i++) { for(int j=0;j<n+2;j++) { mark[i][j]=0; } } //从入口(1,1)开始 mark[1][1]=1; //递归算法返回1表示成功返回 if(seekPath(maze,1,1,p,q)==1) { System.out.println("("+1+","+1+")->"+dir+","+"成功"); } } private int seekPath(int[][] maze, int x, int y, int p, int q) { //用g,h记录位置信息,dir记录方向 int g,h; //已到出口 if(x==p&&y==q) { return 1; } //依次按每个方向寻找通向出口的路径 for(int i=0;i<4;i++) { //找下一位置和方向 g = move[i][0]+x; h = move[i][1]+y; dir=(char) move[i][2]; //下一位置可通,试探该方向 if(maze[g][h]!=1&&mark[g][h]!=1) { mark[g][h]=1; if(seekPath(maze,g,h,p,q)==1) { System.out.print("("+g+","+h+")->"+dir+","); return 1; } } } if(x==1&&y==1) { System.out.println("no path in maze!"); } return 0; } } 
    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/qq_35880453/article/details/82903827
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞