package 番外篇2024;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
public class 寻找最大价值的矿堆递归实现深搜 {
static List<ArrayList<Integer>> list;
static int N;
static int M;
static int[][] visited;
static int res;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
list = new ArrayList<>();
while (sc.hasNextLine()) {
list.add(new ArrayList<Integer>(
Arrays.stream(sc.nextLine().split("")).map(Integer::parseInt).collect(Collectors.toList())));
}
N = list.size();
M = list.get(0).size();
visited = new int[N][M];
cal();
System.out.println(res);
}
static void cal() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (visited[i][j] == 1 || list.get(i).get(j) == 0) {
continue;
}
res = Math.max(res, dfs(i, j));
}
}
}
static int dfs(int i, int j) {
int end = 0;
visited[i][j] = 1;
end += list.get(i).get(j);
int[] newX_ = { -1, 0, 1, 0 };
int[] newY_ = { 0, -1, 0, 1 };
for (int m = 0; m < 4; m++) {
int newX = i + newX_[m];
int newY = j + newY_[m];
if (newX >= 0 && newX < N && newY >= 0 && newY < M && visited[newX][newY] == 0
&& list.get(newX).get(newY) != 0) {
end += dfs(newX, newY);
}
}
return end;
}
}
华为机试:寻找最大价值的矿堆递归实现深搜
于 2024-03-03 21:50:50 首次发布
这篇文章详细介绍了如何使用Java编程语言实现一个寻找最大价值的矿堆问题,通过递归和深度优先搜索策略遍历二维数组并计算最优解。
摘要由CSDN通过智能技术生成