uva 11464

来源:互联网 发布:百雀羚淘宝无盒试用装 编辑:程序博客网 时间:2024/06/11 01:15
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int T;int N;const int maxn = 20;const int ans = 1000000000;int A[maxn][maxn], B[maxn][maxn];int check(int i){memset(B, 0, sizeof(B));for(int c = 0; c < N; c++)if( i & ( 1 << c)){B[0][c] = 1;}else{if( A[0][c] == 1){return ans;}}for(int r = 0; r < N - 1; r++ )for(int c = 0; c < N; c++){int sum = 0;/*up -> left -> right -> get below*/if(r != 0){sum += B[r - 1][c];}if(c != 0){sum += B[r][c - 1];}if(c != N -1){sum += B[r][c + 1];}int below = sum%2;if(below == 0 && A[r + 1][c] == 1){return ans;}B[r + 1][c] = below;}int ret = 0;for(int r = 0; r != N; r++)for(int c = 0; c != N; c++){if( A[r][c] != B[r][c])++ret;}return ret;}int main(){scanf("%d", &T);for(int i = 0; i < T; i++){scanf("%d", &N);for(int r = 0; r < N; r++)for(int c = 0; c < N; c++){scanf("%d", &A[r][c]);}int ret = ans;for(int j = 0; j < (1<<N); j++){ret = min(ret , check(j));/*get smallest */}if(ret == ans) ret = -1;printf("Case %d: %d\n", i + 1, ret);}return 0;}


原创粉丝点击