Untitled
Never
#include <stdio.h> #include <limits.h> int times,n,m,cnt,min; int s[20][20]; int check(); void flip(int x,int y); void dfs(int id); void solve(); int main(void){ scanf("%d",×); char temp; for(int i=0;i<times;i++){ scanf("%d %d",&n,&m); /******把棋盤讀進來*******/ for(int p=1;p<=n;p++){ for(int q=1;q<=m;q++){ scanf(" %c",&temp); if(temp=='w') s[p][q]=1; else s[p][q]=0; } } /******開始看要翻轉多少次*****/ solve(); } return 0; } void solve(){ min=INT_MAX; cnt=0; dfs(0); //printf("%d\n",min); if(min==INT_MAX) printf("oops\n"); else printf("%d\n",min); } void dfs(int id){ //basic step if(check()&&cnt<min) min=cnt; if(id=n*m) return; //recursive step dfs(id+1); flip(id/m+1,id%m+1); ++cnt; dfs(id+1); flip(id/m+1,id%m+1); --cnt; } void flip(int x,int y){ s[x][y]^=1; s[x+1][y]^=1; s[x-1][y]^=1; s[x][y+1]^=1; s[x][y-1]^=1; } int check(){ int add=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j) add+=s[i][j]; } if(add==0) return 1; else if(add=n*m) return 1; else return 0; }