蓝桥杯历届试题 剪格子

    xiaoxiao2021-03-25  144

    题目链接:点击打开链接

    #include<stdio.h> #include<string.h>  int n,m,sum,ant,ans,s; int a[10][10],visit[10][10]; int move[4][2]={0,1,0,-1,1,0,-1,0};  int judge(int x,int y) { if(x<0||x>=n||y<0||y>=m||visit[x][y]) return 0; return 1; } void dfs(int x,int y) { int i,j; if(s==sum) { if(ant>ans) ant=ans; return ; } for(i=0;i<4;i++) { int nx=x+move[i][0]; int ny=y+move[i][1]; if(judge(nx,ny)&&(s+a[nx][ny])<=sum) { visit[nx][ny]=1; s+=a[nx][ny]; ans++; dfs(nx,ny); visit[nx][ny]=0; s-=a[nx][ny]; ans--; } } return ; } int main() { int i,j; while(~scanf("%d%d",&m,&n)) { sum=0; for(i=0;i<n;i++) for(j=0;j<m;j++) { scanf("%d",&a[i][j]); sum+=a[i][j]; } memset(visit,0,sizeof(visit)); if(sum%2) printf("0\n"); else { sum/=2; ant=0x3f3f3f; s=a[0][0]; ans=0; visit[0][0]=1; dfs(0,0); if(ant==0x3f3f3f) printf("0\n"); else printf("%d\n",ant+1); } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-7279.html

    最新回复(0)