poj 1222
分类里说的是高斯消元,但我没看出来,就先搜给搜出来了,一会看看别人怎么消的。
//============================================================================ // Name : 1222.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <cstdio> #include <cstring> using namespace std; int in[10][10], b[10][10]; int N, tag; void press(int x, int y){ in[x][y] = in[x][y] == 1?0:1; // printf("%d %d %d\n", x, y, in[x][y]); if(x > 1){ in[x-1][y] = in[x-1][y] == 1?0:1; } if(x < 5){ in[x+1][y] = in[x+1][y] == 1?0:1; } if(y > 1){ in[x][y-1] = in[x][y-1] == 1?0:1; } if(y < 6){ in[x][y+1] = in[x][y+1] == 1?0:1; } } void dfs(int m){ if(tag == 1) return; if(m == 7){ int flag = 1; for(int i = 2;i <= 5;i++){ for(int j = 1;j <= 6;j++){ if(in[i-1][j] == 1){ press(i, j); b[i][j] = 1; } else{ b[i][j] = 0; } } } for(int i = 1;i <= 6;i++){ if(in[5][i] != 0){ flag = 0; } } if(flag == 0){ for(int i = 2;i <= 5;i++){ for(int j = 1;j <= 6;j++){ if(b[i][j] == 1){ press(i, j); } } } return; } // for(int i = 1;i <= 5;i++){ // for(int j = 1;j <= 6;j++){ // printf("%d ", in[i][j]); // } // printf("\n"); // }printf("\n"); tag = 1; for(int i = 1;i <= 5;i++){ for(int j = 1;j <= 6;j++){ if(j == 1){ printf("%d", b[i][j]); } else{ printf(" %d", b[i][j]); } } printf("\n"); } } else{ b[1][m] = 0; dfs(m+1); press(1, m); b[1][m] = 1; dfs(m+1); press(1, m); } } int main() { scanf("%d", &N); for(int T = 1;T <= N;T++){ for(int i = 1;i <= 5;i++){ for(int j = 1;j <= 6;j++){ scanf("%d", &in[i][j]); } } tag = 0; printf("PUZZLE #%d\n",T); dfs(1); // press(1, 6); // in[1][1] = in[1][1] == 1?0:1; // for(int i = 1;i <= 5;i++){ // for(int j = 1;j <= 6;j++){ // printf("%d ", in[i][j]); // } // printf("\n"); // } } return 0; }