4.2w+
社区成员
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再次进行循环,同时计算出每一次路径的权值
}
}
}
}