Java迷宫问题

Input

一个N × M的二维数组,表示一个迷宫。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

Sample Output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext())
        {
            int m = scanner.nextInt();
            int n = scanner.nextInt();
            int[][] map = new int[m][n];
            int[][] visited = new int[m][n];
            for(int i=0;i<m;i++)
                for(int j=0;j<n;j++)
                    map[i][j] = scanner.nextInt();
            // 四个方向
            int[][] dir = {{1,0},{0,1},{0,-1},{-1,0}};
            Stack<Node> path = new Stack<>();
            Node start = new Node(0, 0);
            Node end = new Node(m-1, n-1);
            visited[0][0]=1;
            path.push(start);
            while(!path.empty())
            {
                boolean flag=false;
                Node peek = path.peek();
                if(peek.x==end.x && peek.y==end.y)
                    break;
                else
                {
                    for(int i=0;i<4;i++)
                    {
                        Node ne = new Node(peek.x+dir[i][0] , peek.y+dir[i][1]);
                        if(ne.x>=0 && ne.x<m && ne.y>=0 && ne.y<n &&
                                map[ne.x][ne.y]==0 && visited[ne.x][ne.y]==0)
                        {
                            path.push(ne);
                            visited[ne.x][ne.y]=1;
                            flag=true;
                            break;
                        }
                    }
                    // 找到一个方向
                    if(flag)
                    {
                        continue;
                    }
                    // 都没有方向
                    path.pop();
                }
            }
            Iterator<Node> it = path.iterator();
            while(it.hasNext())
            {
                Node outNode=it.next();
                System.out.println("("+outNode.x+","+outNode.y+")");
            }
        }
        scanner.close();
    }

}
class Node
{
    int x;
    int y;
    Node(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}
时间: 2024-10-06 05:06:07

Java迷宫问题的相关文章

Java迷宫代码,深度优先遍历

此次迷宫深度优先遍历寻找路径采用栈结构,每个节点都有固定的行走方向(右下左上),除非一个方向走不通,不然会一条道走到黑. 如果路径存在,打印出行走路径,否则打印出迷宫不存在有效路径. 方向常量定义: public interface Constant { // 右方向 int RIGHT = 0; // 下方向 int DOWN = 1; // 左方向 int LEFT = 2; // 上方向 int UP = 3; } 所用到的栈定义(jdk自带的栈或集合也可以实现此功能) /** * 描述:

Java小案例-(逃离迷宫)

一,迷宫需求描述: 1,用户输入迷宫图(限制方形):字母1位墙,0为通,e为出口,m为入口,*为已访问的位置,用外围1围住迷宫 2,运行轨迹右,左,下,上 3,判断该迷宫是否能从入口走到出口,并将搜索过程输出 二,迷宫实现: 1,迷宫元素类MazeCell: package smalldemo.maze; class MazeCell { public int x,y; public MazeCell(){ } public MazeCell(int x,int y){ this.x=x; th

java写的迷宫代码

迷宫代码:截图如下:package com.zxl.maze; /* * 抽象类表示选择不同的算法*/ public abstract class AbstractMap { /* * 得到数据*/ public abstract boolean[][] getData(int m,int n); /* * 重置*/ public abstract void reset(int m,int n); } package com.zxl.maze; /* *深度优先,生成迷宫*/ import ja

HDOJ-ACM1010(JAVA) 奇偶剪枝法 迷宫搜索

转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5568822.html 第一次遇到迷宫搜索,给我的感觉是十分惊喜的:搞懂这个的话,感觉自己又掌握了一项技能~ 个人感觉,角色扮演类的游戏,起码都可以在迷宫搜索上找到影子. 奇偶剪枝这个算法感觉十分开阔的视野~这样去描述这个具体问题实在太形象生动了~ 总而言之,十分有趣. 仔细的人会发现  每当设计到移动,我们必须想到上下左右,这也让我们看到这类算法的思路. 在学习迷宫搜索当中,我发现:这个搜索算法是先分析 找到

小项目特供 简易迷宫(基于Java)

明天返校,于是昨天和今天简单熟系了一下JAVA的GUI,做了一个简易的迷宫小游戏(暂时没有时间实现随机迷宫及多关卡,仅供学习) 源码及运行文件(提供JRE8):简易迷宫  访问密码 8dd8 小项目特供 简易迷宫(基于Java)

Java与算法之(5) - 老鼠走迷宫(深度优先算法)

小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先用一个二维数组来把迷宫"数字化". [java] view plain copy print? int[][] maze = new int[5][4]; 迷宫中每个格子的横纵坐标对应数组的一维和二维索引,例如最左上角的格子是maze[0][0],数组的值表示该格子是否可以通过,0表示可以

Java --- 走迷宫

走迷宫需要考虑大量的实验和错误:沿着一条路径走,当不能再向前走时回溯,然后尝试另一条以前没尝试过的选择.可是使用递归算法. //********************************************************** // MaseSearch.java //********************************************************** public class MaseSearch { public static void ma

Java非递归实现迷宫问题

这个题目是本人的一次课程设计,也是我第一次独立做完的一个小玩意,说实话,昨晚的那一刻很有成就感.整个人开心到在自习室蹦起来.因为之前一直是自学的Java,从没有自己做过任何一个项目,这一个课程设计就花费了我三天的时间,其实应该是两天半,两天半我做出来之后和室友去炫耀,老哥看完说一句,要是把之前的路堵死,从新换一条路呢.然后就炸了...............在做完之后我也只开心了三秒,因为兴奋之后确实无尽的空虚,不知道该向谁去分享自己的这个成就,单身狗伤不起啊.话不多说,直接上代码      界

Java实现可视化迷宫

代码地址如下:http://www.demodashi.com/demo/14547.html 需求 使用深度优先算法求解迷宫路径,使用Java实现求解过程的可视化,可单步运行,形象直观. 演示效果 红色格子为迷宫终点,迷宫可放大缩小,为了录屏选择了较小的尺寸,有多种不同难度的迷宫可以加载. 简单迷宫 复杂迷宫 项目运行 文件中有两个运行脚本,Windows下直接双击win运行.bat即可,linux和Mac运行sh文件中的命令即可,喜欢用IDE的也可自行创建项目. 运行项目后,点击菜单栏左上角