求解迷宫从入口到出口的路径。输入一个迷宫,求从入口通向出口的可行路径。为简化问题,迷宫用二维数组 int maze[10][10]来存储障碍物的分布,假设迷宫的横向和纵向尺寸的大小是一样的,并由程序运行读入, 若读入迷宫大小的值是n(3<n<=10),则该迷宫横向或纵向尺寸都是n,规定迷宫最外面的一圈是障碍物,迷宫的入口是maze[1][1],出口是maze[n-2][n-2], 若maze[i][j] = 1代表该位置是障碍物,若maze[i][j] = 0代表该位置是可以行走的空位(0<=i<=n-1, 0<=j<=n-1)。求从入口maze[1][1]到出口maze[n-2][n-2]可以走通的路径。要求迷宫中只允许在水平或上下四个方向的空位上行走,走过的位置不能重复走,规定必须按向右、向下、向左、向上的顺序向前搜索试探。 如下这样一个迷宫:

对应的二维数组表示: int maze[10][10]={ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,1,1}, {1,0,0,0,1,0,0,0,1,1}, {1,0,1,0,0,0,1,0,0,1}, {1,1,1,1,0,1,1,0,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1}};

输入格式:

输入迷宫大小的整数n, 以及n行和n列的二维数组(数组元素1代表障碍物,0代表空位)。

输出格式:

依次输出从入口到出口可行路径每个位置的行列下标(i,j),每个位置间用“,”分隔。若没有通路,输出:NO。

输入样例1:

4
1 1 1 1
1 0 1 1
1 0 0 1
1 1 1 1

结尾无空行

输出样例1:

(1,1)(2,1)(2,2)

结尾无空行

输入样例2:

10
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1 0 1
1 0 0 1 0 0 0 1 0 1
1 0 0 0 0 1 1 0 0 1
1 0 1 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 0 1 1 1 0 1 1 0 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

结尾无空行

输出样例2:

(1,1)(1,2)(2,2)(3,2)(3,1)(4,1)(5,1)(5,2)(5,3)(6,3)(6,4)(6,5)(7,5)(8,5)(8,6)(8,7)(8,8)

结尾无空行

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
    // write your code here
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(),i,j;
        int mg[][]=new int[n][n];
        Maze m=new Maze(n);
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                mg[i][j]=sc.nextInt();
            }
        }
        m.create(mg);
      if(m.mgth(1,1,n-2,n-2))
          m.out();
      else
          System.out.println("NO");
    }
}

class Box {
    int i,j,k;
    public Box(int i,int j,int k){
        this.i=i;
        this.j=j;

}
}

class Maze {
    ArrayList<Box> arr=new ArrayList<Box>();
    int n;
    int mg[][];
    public Maze(){}
    public Maze(int n)
    {
        this.n=n;
        mg=new int[n][n];
    }

public void create(int a[][]){
        int i=0,j=0;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                mg[i][j]=a[i][j];
        }
    }

public Boolean mgth(int xi,int yi,int xe,int ye)
    {
        int i=0,j=0,k = -1,i1=0,j1=0;
        Box box,e;
        boolean find;
        Stack<Box> st=new Stack<Box>();
        st.push(new Box(xi,yi,-1));
        mg[xi][yi]=-1;
        while(!st.empty()) {
            k = -1;
            box = st.peek();
            i = box.i;
            j = box.j;
            k = box.k;
            if (i == xe && j == ye) {
                while (!st.empty()) {
                    e = st.pop();
                    arr.add(e);
                }
                return true;
            }

find = false;
            while (k < 3 && !find) {
                k++;
                if (k == 3){ i1 = i;
                j1 = j - 1;}
                else if (k == 0) {i1 = i - 1;
                j1 = j;}
                else if (k == 1){ i1 = i;
                j1 = j + 1;}
                else if (k == 2) {i1 = i + 1;
                j1 = j;}
                if (mg[i1][j1] == 0)
                    find = true;
            }

if (find) {
                e = st.pop();
                e.k = k;
                st.push(e);
                st.push(new Box(i1, j1, -1));
                mg[i1][j1] = -1;
            } else {
                mg[i][j] = 0;
                st.pop();
            }
        }
        return false;
    }

public void out(){
        int i=0;
        for(i=arr.size()-1;i>=0;i--)
            System.out.print("("+arr.get(i).i+","+arr.get(i).j+")");
    }
}

7-7 求解迷宫从入口到出口的路径 (15 分) java相关推荐

  1. c语言迷宫游戏怎么存放坐标,求解迷宫问题(c语言,很详细哦

    <求解迷宫问题(c语言,很详细哦>由会员分享,可在线阅读,更多相关<求解迷宫问题(c语言,很详细哦(5页珍藏版)>请在人人文库网上搜索. 1.求迷宫问题就是求出从入口到出口的路 ...

  2. 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)

    // algo3-11.cpp 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径) #include"c1.h" #include"func3-1.cpp" ...

  3. A*算法求解迷宫问题(算法讲解与证明、python实现与可视化)

    目录 一.引入 二.具体细节 1.BFS(Breadth First Search) 2.Dijkstra(Uniform Cost Search) 3.启发式(Heuristic search) 4 ...

  4. 栈和队列求解迷宫问题(数据结构学习笔记)

    文章目录 迷宫问题 "栈"求解迷宫问题 行走规则 算法思路 算法代码 栈的定义 算法设计 完整代码 最终迷宫路径 算法总结 "队列"求解迷宫问题 算法思路 算法 ...

  5. 【数据结构】10分钟教你用栈求解迷宫老鼠问题超详细教程附C++源代码

    问题描述 给定一张迷宫地图和一个迷宫入口,然后进入迷宫探索找到一个出口.如下图所示: 该图是一个矩形区域,有一个入口和出口.迷宫内部包含不能穿越的墙壁或者障碍物.这些障碍物沿着行和列放置,与迷宫的边界 ...

  6. 递归 求解迷宫问题 Java

    目录 题目描述: 解题思路: 代码分析: 题目描述: 如图所示有一个 3X4 的迷宫,其中黑色方框代表墙,白色方框代表可通行,指定迷宫的入口和出口,计算出入口到出口的路径 解题思路: 1.先将迷宫地图 ...

  7. python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序

    目的:能将栈运用的更为熟练 实验内容:求解迷宫问题程序,要求输出如图所示的迷宫的路径,并求出第一条最短路径的长度以及最短路径. 设计的算法功能: mgpath(int xi,int yi,int xe ...

  8. [数据结构]求解迷宫最短路径问题

    一.问题概述 之前,我们了解了如何实现迷宫问题(对于迷宫只有一个出口可以通的情况),事实上我们的迷宫有多个出口,对于每条路径来说,有长有短,所以在这里,我们讨论一下迷宫的最短路径,即迷宫路径的最优解问 ...

  9. java 递归_采用递归算法求解迷宫问题(Java版) | 附代码+视频

    递归算法能够解决很多计算机科学问题,迷宫问题就是其中一个典型案例.本篇教程我们将采用递归算法求解迷宫问题,输出从入口到出口的所有迷宫路径. 01 用递归算法解决迷宫问题 迷宫问题在<数据结构教程 ...

最新文章

  1. C语言再学习 -- 字符串和字符串函数
  2. Cpp 对象模型探索 / 拷贝构造函数 和 赋值构造函数 的调用时机
  3. 牛客题霸 [ 寻找峰值] C++题解/答案
  4. Google App Engine JAX-RS REST服务
  5. 线性表—顺序存储结构-顺序表
  6. mysql优化-面试题
  7. 为什么你的支付宝芝麻信用分就是不涨?
  8. 看懂理解 keyboard中 , navigation的设置: 切换工作区和移动窗口到不同的工作区.
  9. Runtime.getRuntime().exec()如何调用7z解压文件
  10. 6.Nginx静态代理
  11. win7系统激活最简单方法
  12. canvas 之 炫彩小球
  13. codevs 1296
  14. java queue toarray_Java PriorityBlockingQueue toArray()用法及代码示例
  15. docker oxidized时区问题,时间显示不是北京时间问题的解决办法
  16. linux 清屏命令(clear,reset)
  17. caj怎么转pdf?
  18. 什么是数据描述统计分析指标?
  19. CSDN 软件开发新手赛正式启动,召集热爱编程的你
  20. 转换MP3工具(Streambox RipperRM)

热门文章

  1. 【mpeg】mpeg1、mpeg2与mpeg4码流结构区别分析
  2. 微信小程序开发之——附近酒店-分析(1)
  3. 软件设计模式六大原则
  4. 使用EMU8086学习汇编
  5. Map的有序和无序实现类,与Map的排序
  6. 从月薪 7.5K 再到拿到字节跳动 20K*14 薪那天,我泪目了,没人知道我付出了多少
  7. 查找算法——顺序查找
  8. android 删除短信 数据库,删除的短信如何恢复?Android手机短信删除了怎么恢复...
  9. JavaScript获得页面卷起的高度
  10. Shell脚本,循环语句用于减少程序代码冗余和重复,for语句,while语句,使用let进行变量自增