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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值