JAVA算法:DFS算法题解两个例子(走迷宫和求排列组合数)

DFS算法题解两个例子(走迷宫和求排列组合数)

用DFS算法来求解几道题目。典型的问题是走迷宫问题。

####走迷宫题目描述

给定一个M*N的矩阵(二维数组),分别用0和1表示通路和障碍物。即 0 表示 通路;1 表示 障碍物。从矩阵的左上角开始,每次只能向右,下,左,上移动位置,不能斜着走。请给出从入口到出口的路线。

走迷宫

怎么开始思考呢?
首先想想,这个题目其实是找从入口(Entrance)到出口(Exit)的可能的路径。矩阵(二维数组)从左上角开始,坐标为(0,0),可以向右走,坐标为(0,1);或者向下走,坐标为(1,0)。对于一般的位置(x,y),可以有4个搜索方向:右(x,y+1),下(x+1,y),左(x,y-1),上(x-1,y)。

走迷宫DFS算法问题

如何设计DFS搜索函数呢?

二维数组(M行,N列)的右下角出口位置可以表示为:(m-1, n-1)
路径表示为path ; 但是路径可能有很多条,其中最短的路径表示为:shortestPath。

至少这个函数需要三个参数。dfs(x坐标,y坐标,搜索矩阵即二维数组)

所定义dfs函数为:

public static void dfsMaze(int x,int y, int[][] maze)

然后设计搜索结束返回的判断条件

//设置结束条件        
        if (x < 0 || y < 0)  
            return;  
        // 如果坐标越界,或者 maze[x][y]==1 表示遇到障碍
        if (x > m - 1 || y > n - 1 || maze[x][y] ==1)  
            return;  
        //表示遇到障碍
        if (maze[x][y] == 1)  
            return; // 判断是否通路和越界  

判断是否达到出口位置


                
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值