poj1222开关问题, 高斯消元
2015-12-14 18:20
417 查看
题意:
给个5X6的矩阵,只有0和1;
然后叫你将1全部翻成0;
理解:
直接就是开关问题啦...
枚举第一行的情况,推出所有...
不过我自己竟然没考虑到0的情况....
看讨论说可以用高斯消元法做;
但我并不会...得学习下;
看了大神的代码..发现高斯消元有点麻烦;
它是根据某坐标与其他坐标的关系来列方程;
共30个方程,30个未知数....
然后求唯一解;
这样的话我就觉得麻烦了.....
代码如下:
太冗长了...
给个5X6的矩阵,只有0和1;
然后叫你将1全部翻成0;
理解:
直接就是开关问题啦...
枚举第一行的情况,推出所有...
不过我自己竟然没考虑到0的情况....
看讨论说可以用高斯消元法做;
但我并不会...得学习下;
看了大神的代码..发现高斯消元有点麻烦;
它是根据某坐标与其他坐标的关系来列方程;
共30个方程,30个未知数....
然后求唯一解;
这样的话我就觉得麻烦了.....
代码如下:
太冗长了...
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; vector<int> vec[6], puz[6], v_c[6]; int d[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; void pre(int x, int y) { v_c[x][y] = !v_c[x][y]; puz[x][y] = 1; for (int j = 0; j < 4; ++j) { int nx = x + d[j][0]; int ny = y + d[j][1]; if (nx >= 0 && nx < 5 && ny >= 0 && ny < 6) { v_c[nx][ny] = !v_c[nx][ny]; } } } bool OK(int m) { for (int i = 0; i < 5; ++i) { v_c[i].clear(); puz[i].clear(); for (int j = 0; j < 6; ++j) { puz[i].push_back(0); v_c[i].push_back(vec[i][j]); } } for (int i = 0; i < 6; ++i) { if (((1 << i) & m) != 0) { pre(0, i); } } //for (int i = 0; i < 5; ++i) { for (int j = 0; j < 6; ++j) printf("%d ", v_c[i][j]);printf("\n");} //printf("~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); for (int i = 1; i < 5; ++i) { for (int j = 0; j < 6; ++j) { if (v_c[i - 1][j] == 1) { pre(i, j); } } } for (int i = 0; i < 6; ++i) { if (v_c[4][i] == 1) { return false; } } for (int i = 0; i < 5; ++i) { for (int j = 0; j < 6; ++j) { printf("%d ", puz[i][j]); } printf("\n"); } return true; } int main() { int t; scanf("%d", &t); for (int I = 1; I <= t; ++I) { for (int i = 0; i < 5; ++i) { vec[i].clear(); for (int j = 0; j < 6; ++j) { int num; scanf("%d", &num); vec[i].push_back(num); } } printf("PUZZLE #%d\n", I); for (int i = 0 ; i < (1 << 6); ++i)//0的情况....WA { if (OK(i)) { break; } } } return 0; }
相关文章推荐
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1001
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列
- POJ-1003 Hangover
- POJ-1004 Financial Management
- 用单调栈解决最大连续矩形面积问题
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- POJ 1200 Crazy Search(简单哈希)
- 【高手回避】poj3268,一道很水的dijkstra算法题
- POJ 1088 滑雪
- poj2387 Til the Cows Come Home—Dijkstra模板