小莫蓝桥刷题之路(跳跃DFS)

纪小莫 2023-03-06 23:14:40

 

import java.util.Scanner;

public class Main {
    static Scanner sr = new Scanner(System.in);
    static int n = sr.nextInt();
    static int m = sr.nextInt();
    static int[][] map = new int[n][m];
    static int dx[] = {0,0,0,1,2,3,1,2,1};
    static int dy[] = {1,2,3,0,0,0,1,1,2};
    //这里的dx,dy的意思是他在二维矩阵所做出的动作
    static int max_length = Integer.MIN_VALUE;//先定义一个变量求最长度,即题目所需的总权值和最大
public static void main(String[] args) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            map[i][j] = sr.nextInt();//输入每个点的权值
        }
    }
    dfs(0,0, map[0][0]);//map[0][0]表示第一个点的权值
    System.out.println(max_length);
}
private static void dfs(int i, int j, int length) {
    if(i==n-1 && j== m-1)
    max_length = Math.max(length, max_length);//这里是求最长的长度,即最大的权值和,将每一次的权值和length进行比较,得出最大的一个。
    for (int k = 0; k < dx.length; k++) {
        int nx = i + dx[k];//对每一个点进行递归,遍历dx[]中每一个数
        int ny = j + dy[k];//对每一个点进行递归,遍历dy[]中每一个数
        //(nx,ny),(0,1)(0,2)(0,3)(1,0)(2,0)(3,0)(1,1)(2,1)(1,2)
        if (nx >= 0 && ny >= 0 && nx < n && ny < m ) {
            dfs(nx,ny,length+map[nx][ny]);//将nx,ny赋值给i,j再次进行循环,同时计算出每一次路径的权值
        }
    }
}
}

 

...全文
19 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,781

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧