应该是第十九天了吧,好难啊,一题都不会,赶紧打卡
灌溉
package DFSxt;
import java.util.Scanner;
public class guangai {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 输入花园的行数
int m = scanner.nextInt(); // 输入花园的列数
int pipeCount = scanner.nextInt(); // 输入水管的数量
boolean[][] garden = new boolean[n][m]; // 定义一个布尔类型的二维数组表示花园是否被灌溉
for (int i = 0; i < pipeCount; i++) {
int row = scanner.nextInt()-1; // 输入水管所在的行数(从1开始),需要转化为数组下标(从0开始)
int col = scanner.nextInt()-1; // 输入水管所在的列数(从1开始),需要转化为数组下标(从0开始)
garden[row][col] = true; // 将水管所在的位置标记为已灌溉
}
int k = scanner.nextInt(); // 输入需要灌溉的时间(分钟)
int[] dx = {0, 0, 1, -1}; // 定义dx和dy数组,表示向四个方向扩散
int[] dy = {1, -1, 0, 0};
for (int t = 0; t < k; t++) { // 迭代k次,表示k分钟后的灌溉情况
boolean[][] nextGarden = new boolean[n][m]; // 定义一个新的二维数组,表示t+1分钟后的灌溉情况
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (garden[i][j]) { // 如果当前位置已经被灌溉了
for (int d = 0; d < 4; d++) { // 向四个方向扩散
int ni = i + dx[d]; // 计算扩散后的新位置
int nj = j + dy[d];
if (ni >= 0 && ni < n && nj >= 0 && nj < m) { // 如果新位置在花园范围内
nextGarden[ni][nj] = true; // 将新位置标记为已灌溉
}
}
}
}
}
garden = nextGarden; // 将t+1分钟后的灌溉情况赋值给当前灌溉情况
}
int count = pipeCount; // 定义计数器,统计已灌溉的方格数量
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (garden[i][j]) { // 如果当前位置已经被灌溉了
count++; // 计数器加1
}
}
}
System.out.println(count); // 输出已灌溉的方格数量
}
}
该程序使用Java编写,模拟了一个花园灌溉系统。通过读取用户输入的花园尺寸、水管位置和时间,使用深度优先搜索(DFS)策略来模拟水从水管扩散的过程。在给定的时间内,程序计算出被灌溉的花园区域数量并输出。
560

被折叠的 条评论
为什么被折叠?



