提交时间:2024-01-24 21:05:46

运行 ID: 127048

#include<bits/stdc++.h> using namespace std; char Not(char a){ if(a=='w')return 'b'; return 'w'; } int n,ans=0x7fffffff; char a[20][20]; void dfs(int l,int c,int step){ if(l==n&&c>n){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(a[i][j]!=a[1][1])return; } } ans=min(ans,step); return; } if(c>n){ c=1; l++; } for(int i=1;i<=max(l-2,0);i++){ for(int j=1;j<=n;j++){ if(a[i][j]!=a[1][1])return; } } dfs(l,c+1,step); a[l-1][c]=Not(a[l-1][c]); a[l][c-1]=Not(a[l][c-1]); a[l][c]=Not(a[l][c]); a[l][c+1]=Not(a[l][c+1]); a[l+1][c]=Not(a[l+1][c]); dfs(l,c+1,step+1); } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>a[i][j]; if(a[i][j]=='\n')j--; } } dfs(1,1,0); if(ans<0x7fffffff)cout<<ans; else cout<<"Impossible"; return 0; }