画家问题

来源:互联网 发布:2017网络视听大会 招商 编辑:程序博客网 时间:2024/04/28 03:23
<span style="font-family: Arial, Helvetica, sans-serif;">#include <cstdlib></span>
#include <cstdio>#include <iostream>using namespace std;#pragma warning(disable:4996)int puzzle[20][20];int press[20][20];int n;void enumate();bool guess();bool failed();int main(){int cases, r, c, count;scanf("%d", &cases);for (int j = 0; j < cases;j++){count = 0;scanf("%d", &n);for (r = 0; r < n + 1; r++){press[r][0] = press[r][n + 1] = 0;}for (c = 1; c < n + 1; c++)press[0][c] = 0;char a;for (r = 1; r < n + 1;r++)for (c = 1; c < n + 1; c++){//scanf("%c", &a);cin >> a;//cout << a << endl;if (a == 'y')puzzle[r][c] = 0;else if (a == 'w')puzzle[r][c] = 1;}enumate();if (failed() && n > 1)//只有一组数据时会出错printf("inf\n");else{for (r = 1; r < n + 1; r++){for (c = 1; c < n + 1; c++){if (press[r][c] == 1)count++;}}printf("%d\n", count);}}return 0;}void enumate(){int c;for (c = 1; c < n + 1; c++)press[1][c] = 0;while (guess() == false){if (failed())break;press[1][1]++;c = 1;while (press[1][c]>1){press[1][c] = 0;c++;press[1][c]++;}}return;}bool guess(){int c, r;for (r = 1; r < n;r++)for (c = 1; c < n + 1; c++)press[r + 1][c] = (puzzle[r][c] + press[r][c] + press[r - 1][c] + press[r][c - 1] + press[r][c + 1]) % 2;for (c = 1; c < n + 1;c++)if ((press[n][c - 1] + press[n][c] + press[n][c + 1] + press[n - 1][c]) % 2 != puzzle[n][c])return false;return true;}inline bool failed(){ int c;bool failure = true;for (c = 1; c < n + 1;c++)if (press[1][c] == 0)failure = false;return failure;}

0 0
原创粉丝点击