迷宫问题1-在给定的迷宫中判断是否存在一条路径从起点到终点

原创 2016年09月19日 10:52:05

问题描述

给定一个迷宫,也即一个矩阵,矩阵中由数字0和1 组成,其中,0表示当前位置可以通行,而1表示当前位置是障碍物,如迷宫中的砖墙,无法通行,再给定一个起点和一个目标点,判断是否存在一个可行的路径,从起点到终点。(注:起点和终点一定可通行,即对一个的位置都是0)

解法

这里使用深度优先搜索+回溯的方法进行可行路径的判断

输入输出及状态说明

0–可通行
1–障碍物

迷宫矩阵5x5
{
{0,1,0,0,1},
{0,0,1,1,1},
{1,0,0,0,0},
{1,0,1,1,0},
{1,0,0,0,0},
}

起点 (0,0)
终点(4,4)

输出
yes–表示从起点到终点存在一条路径
no–表示从起点到终点不存在一条路径

算法描述

/**
 * Created by ChaoNi on 2016/9/19.
 */

public class DFS {
    //输入的迷宫矩阵
    private static int[][] matrix= {
            {0,1,0,0,1},
            {0,0,1,1,1},
            {1,0,0,0,0},
            {1,0,1,1,0},
            {1,0,0,0,0},
    };

    //迷宫的宽度
    private static  int width=5;
    //迷宫的高度
    private static int heigth=5;

    //标记迷宫中各个位置是否已经被走过
    private static boolean[][] flag=null;
    //在迷宫中的移动方向
    private static int[][] direction={
            {0,1},
            {0,-1},
            {-1,0},
            {1,0}
    };

    public static void main(String[] args) {
        //起始点
        Point start=new Point(0,0);
        //目标点
        Point end=new Point(width-1,heigth-1);


        flag=new boolean[width][heigth];
        if(existPath(start,end)) System.out.println("yes");
        else System.out.println("no");
       );
   }

    //判断是否存在路径
    public static boolean existPath(Point start,Point end){
        //到达目标点
        if(start.getX()==end.getX()&&start.getY()==end.getY()){
            return true;
        }
        //从四个方向进行再次遍历
        for(int i=0;i<4;i++){
            int nx=start.getX()+direction[i][0];
            int ny=start.getY()+direction[i][1];

            //检验方向的合法性
            if(nx>=0&&nx<width&&ny>=0&&ny<heigth&&flag[nx][ny]==false&&matrix[nx][ny]==0){
                //标记的位置需要对应一下
                flag[nx][ny]=true;
                if(existPath(new Point(nx,ny),end)) return true;
                //当前这个方向不能完成,则回退到前一个结果,进行再次探索
                flag[nx][ny]=false;
            }
        }
        return false;
    }  
}

//位置点的辅助类
class Point {
    private int x;
    private int y;
    public Point(int xx, int yy){
        this.x=xx;
        this.y=yy;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    @Override
    public String toString() {
        return "[" + x +
                ", "+y+"]";
    }
}

结果

在给定的测试迷宫矩阵中,输出的结果应为yes,也就是说存在从起点到终点的一条路径

版权声明:本文为博主原创文章,未经博主允许不得转载。

用Android访问本地站点

Android 开发时,访问本地站点如  Localhost 或 127.0.0.1 会出现错误。这是因为 模拟器会将自己默认为主机( Localhost 或 127.0.0.1)如果你想在模拟器si...
  • skylen
  • skylen
  • 2011年02月21日 18:11
  • 844

迷宫问题一 找到迷宫的一条路径(DFS+回溯)

问题描述: 一天,小明不小心进入了一个迷宫,现在请你帮助他判断能否出走出迷宫,如果可能,则输出YES. 如果不能走到出口,则输出NO. 每次走只能是上下左右4个方向. *表示可走 #表示障碍 ...
  • u013497977
  • u013497977
  • 2014年12月11日 23:35
  • 1332

3522. 【NOIP2013模拟11.7B组】迷宫花园(maze)

Description给定一个一定存在从起点到终点的路径的四联通迷宫。已知Tar左右方向移动的时间为1,上下移动的时间为未知实数v。求当Tar从起点到终点的最短移动时间为已知实数L时,未知实数v是多少...
  • qq_34593871
  • qq_34593871
  • 2017年07月08日 20:44
  • 85

Makefile中添加gdb调试信息

snmpb的源代码/app文件夹下的makefile,由他生成makefile.snmpb,实际make是依据makefile.snmpb。以下是makefile.snmpb前几行:CC       ...
  • idx001
  • idx001
  • 2011年07月28日 00:08
  • 1461

迷宫问题2-在给定的迷宫中计算从起点到终点的路径数目

问题描述给定一个迷宫,也即一个矩阵,矩阵中由数字0和1 组成,其中,0表示当前位置可以通行,而1表示当前位置是障碍物,如迷宫中的砖墙,无法通行,再给定一个起点和一个目标点,请计算从起点到目标点可行的路...
  • jack_nichao
  • jack_nichao
  • 2016年09月19日 11:00
  • 303

Noip2014寻找道路题解

题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的点都直接或间接与终点...
  • t14t41t
  • t14t41t
  • 2015年05月28日 17:54
  • 996

元旦开张大吉大利

元旦开张大吉大利哈哈 新年新气象 开个博客 过过瘾
  • qujunde
  • qujunde
  • 2009年01月01日 10:37
  • 435

迷宫问题(2) 解题报告

迷宫问题 【问题描述】     给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中...
  • Clove_unique
  • Clove_unique
  • 2015年08月13日 20:46
  • 888

迷宫问题 BFS入门水题

1102:迷宫问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:84 解决: 41 题目描述 小明置身于一个迷宫,请你帮小明找出从起点到终点的最短路程。 ...
  • u013067957
  • u013067957
  • 2014年07月29日 16:47
  • 547

【BFS】一道经典的迷宫模板问题

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 以上是样例 感觉最近的题都和结构体有关系,在结构体里定义变量,然后调用。 #inc...
  • IronCarrot
  • IronCarrot
  • 2016年11月29日 17:42
  • 286
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:迷宫问题1-在给定的迷宫中判断是否存在一条路径从起点到终点
举报原因:
原因补充:

(最多只允许输入30个字)