编辑代码

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    static int sum;
    static int n;
    static int m;
    static int[][] nums;
    static int[][] vivt;
    static int ans=Integer.MAX_VALUE;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        m=scan.nextInt();
        n=scan.nextInt();
        nums=new int[n][m];
        vivt=new int[n][m];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                nums[i][j]=scan.nextInt();
                sum+=nums[i][j];//把和累加起来
            }
        }
        if(sum%2!=0){System.out.println("0");return ;}
        dfs(0,0,0,0);
        System.out.println(ans);
        scan.close();
    }
    //遍历
    //参数,遍历上下左右,计数器,格子的数量,边界值n ,m
    public static void dfs(int x,int y,int num,int temmp){
        if(x<0||x>=n||y<0||y>=m||vivt[x][y]==1||num>sum/2){
            return ;
        }
        if(num==sum/2){
            ans=Math.min(ans,temmp);
            return ;
        }
        vivt[x][y]=1;
        num+=nums[x][y];
        dfs(x+1,y,num,temmp+1);
        dfs(x-1,y,num,temmp+1);
        dfs(x,y+1,num,temmp+1);
        dfs(x,y-1,num,temmp+1);
        vivt[x][y]=0;
    }
}