POJ 3279 Fliptile——开关问题
#include #include #include #include using namespace std;int m, n, a[20][20], b[20][20], c[20][20], ans[20][20];void fff(int x, int y) { b[x][y] = !b[x][y]; if (x - 1 >= 0) { b[x - 1][y] = !b[x - 1][y]; } if (x + 1 < m) { b[x + 1][y] = !b[x + 1][y]; } if (y - 1 >= 0) { b[x][y - 1] = !b[x][y - 1]; } if (y + 1 < n) { b[x][y + 1] = !b[x][y + 1]; }}int main(){ while (scanf("%d %d", &m, &n) == 2) { for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { scanf("%d", &a[i][j]); } } int minf = 1000; for (int kase = 0; kase < (1<>(n - i - 1))); if (c[0][i]) { fff(0, i); cnt++; } } for (int i = 1; i < m; i++) { for (int j = 0; j < n; j++) { if (b[i - 1][j]) { c[i][j] = 1; fff(i, j); cnt++; } } } bool ok = true; for (int i = 0; i < n; i++) { if (b[m - 1][i]) { ok = false; break; } } if (ok && cnt < minf) { minf = cnt; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { ans[i][j] = c[i][j]; } } } } if (minf == 1000) { printf("IMPOSSIBLE\n"); } else { for (int i = 0; i < m; i++) { printf("%d", ans[i][0]); for (int j = 1; j < n; j++) { printf(" %d", ans[i][j]); } printf("\n"); } } } return 0;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~