#include<iostream> char data[16]; int a[16]; int d[4] = { -4, 1, 4, -1 }; char b[16]; int flag; int count = 0; int min = 1000; int sum; void dfs(int step) { sum = 0; for (int i = 0; i < step; i++) { sum = sum + a[i]; } if (sum >= min) return; if (step == 16) { count = 0; flag = 1; for (int i = 0; i<16; i++) b[i] = data[i]; for (int i = 0; i<16; i++) { if (a[i] == 1) { if (b[i] == ‘b‘) { b[i] = ‘w‘; } else { b[i] = ‘b‘; } for (int j = 0; j<4; j++) { if (i + d[j] >= 0 && i + d[j]<16) { if (b[i + d[j]] == ‘w‘) { b[i + d[j]] = ‘b‘; } else { b[i + d[j]] = ‘w‘; } } } } } for (int i = 0; i<16; i++) { if (b[0] == b[i]) flag = 1; else { flag = 0; break; } } if (flag == 1) { //printf("!!"); for (int i = 0; i<16; i++) { if (a[i] == 1) count++; } //printf("%d", count); if (count < min) min = count; } // printf("%d", min); return; } for (int i = 0; i<2; i++) { a[step] = i; dfs(step + 1); } } int main() { freopen("input.txt", "r", stdin); for (int i = 0; i<16; i++) { if (i == 4 || i == 8 || i == 12) getchar(); scanf("%c", &data[i]); } for (int i = 0; i<16; i++) { b[i] = data[i]; } dfs(0); printf("%d", min); }
原文:http://www.cnblogs.com/dahuacarry/p/6250702.html