#include <bits/stdc++.h> using namespace std; int n,m,sum=0,maxx=0,num=1e9+5; int a[10][10],flag[10][10]; int ansx[4]={0,0,-1,1},ansy[4]={1,-1,0,0}; void dfs(int x,int y,int currentsum,int currentnum){ flag[x][y]=1;currentsum+=a[x][y];currentnum++; if(currentsum>=sum/2){ if(currentsum==sum/2)num=min(currentnum,num); flag[x][y]=0; return;} for(int i=0;i<4;i++){ int tx=x+ansx[i],ty=y+ansy[i]; if(!flag[tx][ty] && tx<n&&tx>=0 && ty<m&&ty>=0){ dfs(tx,ty,currentsum,currentnum); flag[tx][ty]=0;} } } int main() { scanf("%d%d",&m,&n); for(int i=0;i<n;i++) for(int j=0;j<m;j++){ scanf("%d",&a[i][j]); sum+=a[i][j]; maxx=max(maxx,a[i][j]);} if(maxx>sum/2 || sum%2){printf("0\n");return 0;} dfs(0,0,0,0); printf("%d\n",num); }
原文:https://www.cnblogs.com/frente/p/10534516.html