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;
	}
}

你可能感兴趣的:(算法)