Untitled

                Never    
C
       
#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",&times);
    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;
}

Raw Text