算法题解:走方格问题大汇总(持续更新JAVA代码)

本文汇总了四个关于在二维矩阵中走方格的问题,包括寻找路径、求最大路径和、输出所有可能路径及计算路径数量。通过BFS、DFS、递归和动态规划等算法进行分析和设计,提供了详细的JAVA代码实现。
摘要由CSDN通过智能技术生成

算法题解:走方格问题大汇总(持续更新JAVA代码)

Q1. 在给定的Matrix中寻找路径

给定一个二维数组,求是否存在一条从左上角移动到右下角的路径。在给定的二维数组中,单元格的值为-1时表示不能通过;单元格的值为0时,表示可以通过。

例如:给定一个二维数组如下:

{ 0, 0, 0, -1, 0},
{-1, 0, 0, -1, -1},
{ 0, 0, 0, -1, 0},
{-1, 0, 0,  0, 0},
{ 0, 0, -1,  0, 0}

路径存在,返回YES

{ 0, 0, 0, -1, 0},
{-1, 0, 0, -1, -1},
{ 0, 0, 0, -1, 0},
{-1, 0, -1,  0, 0},
{ 0, 0, -1,  0, 0}

路径不存在,返回NO


算法分析

这个问题简单的解决方法是通过 BFS 或 DFS 算法来查找是否存在符合条件的路径(Path)。

更好的解决方法是通过将所有可访问节点的值更改为1来标记它们。

首先,将左上角第一个元素的值标记为1。然后在第一行中获取下一个(当前)值并与前一个值进行比较。仅当当前值可到达时(不等于-1),才将其设置为前一个值。同样,对列值执行相同的操作,方法是将当前值与前一列的值(如果可以访问)进行比较并设置。

然后从第一行和第一列开始,并获取前一行和前一列的值。找到它们之间的最大值,并将当前索引设置为该最大值。如果当前索引值为-1,则不会有任何更改。

最后,如果右下角的最终索引为1,则返回“是”,否则返回“否”。

package com.bean.algorithm.basic;

public class FindthePathinMatrix {

	// 寻找是否存在一条路径从左上角通向右下角
	static boolean isPath(int arr[][]) {
		
		int row=arr.length;
		int col=arr[0].length;
		
		// 设置左上角的第一个元素值为1,即 arr[0][0] = 1
		arr[0][0] = 1;

		//标记从左上到右下的元素位置是否可以访问(visited)从第1行第1列开始
		for (int i = 1; i < col; i++) {
			if (arr[0][i] != -1) {
				arr[0][i] = arr[0][i - 1];
			}
				
		}
			
		for (int j = 1; j < row; j++) {
			if (arr[j][0] !=
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值