dfs:轰炸区最优选取

图片说明

import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
import java.util.*;

public class Main {
    static int a[][];
    static int n;
    static int maxp;
    static int dfs(int k,int l,int r,int arr[][]){
        maxp = 0;
        for(int i = r;i < r + k;i++){
            for(int j = l;j < l + k;j++){
                maxp += arr[i][j];

            }
        }
        return maxp;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Integer> mylist = new ArrayList<>();
        HashMap map = new HashMap();
        int n = sc.nextInt();
        int k = sc.nextInt();
        a = new int[n][n];
        for(int i = 0;i < n;i++){
            for(int j = 0;j <n;j++){
                a[i][j] = sc.nextInt();
            }
        }
        int max = 0;
        for(int i = 0;i < n - k + 1;i++){
            for(int j = 0;j < n - k + 1;j++){
                int max2 = dfs(k,i,j,a);
                max = Math.max(max,max2);
            }
        }
        System.out.println(max);


    }

}

首先想到的是使用递归,但是在这一题显然比较简单

第一,自己的dfs没有想到加一个数组参数(自己想一下,如果没有数组参数,那要怎么求和?),其实dfs很简单,就是放一个参数k(题目要求),参数l(列),参数r(行),参数数组a。要保证for循环的范围不超过k的要求下求出max即可。

以上是dfs方法,在main方法中要再放一个for循环,防止边长超出二维数组的边长,制定好条件之后直接调用dfs就可以了,先向右探索,探索完之后,调到下一行重新框一个正方形继续向右探索。

全部评论

相关推荐

咩咩子_:项目和图形引擎岗没啥关系,最好还是项目和岗位有相关度好点,不然真有面也不一定会问很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务