搜索- poj2965 The Pilots Brothers' refrigerator
2015-04-20 17:08
232 查看
题目:
http://poj.org/problem?id=2965题意:
给定4*4方格,每格中为0或1,当翻转某格时,该格所在行及列随之翻转,求将全部格子变成1的最少步数思路:
递归搜索问题:
用单个数字表示,待处理格子的位置;但在转化下标时,/, %运算没有处理好代码:
#include <stdio.h>#include <stack>
struct pos{
int x, y;
};
using namespace std;
stack<pos> s;
stack<pos> sTemp;
int check = 0;
int isFinish(int arr[4][4]){
int c = 1;
for (int i = 0; i < 4 && c; ++i)
for (int j = 0; j < 4 && c; ++j){
if (arr[i][j] == 0){
c = 0;
}
}
return c;
}
void search(int arr[4][4],int pos,int x){
if (check) return;
int i = (pos - 1) / 4, j = pos % 4 - 1;
j = j < 0 ? 3 : j;
s.push({ i, j });
arr[i][j] = 1 - arr[i][j];
for (int k = 0; k < 4; ++k){
arr[i][k] = 1 - arr[i][k];
arr[k][j] = 1 - arr[k][j];
}
if (x != 1){
for (int k = pos + 1; k <= 16 - (x - 1) + 1; k++)
search(arr, k, x - 1);
}
else{
if (isFinish(arr)){
check = s.size();
printf("%d\n", check);
while (!s.empty()){
sTemp.push(s.top());
s.pop();
}
while (!sTemp.empty()){
printf("%d %d\n", sTemp.top().x + 1, sTemp.top().y + 1);
sTemp.pop();
}
}
}
if (!s.empty()) s.pop();
arr[i][j] = 1 - arr[i][j];
for (int k = 0; k < 4; ++k){
arr[i][k] = 1 - arr[i][k];
arr[k][j] = 1 - arr[k][j];
}
return;
}
int main(){
int arr[4][4] = { 0 };
for (int i = 0; i < 4; ++i){
char str[5];
scanf("%s", str);
for (int j = 0; j < 4; ++j)
// - open
if (str[j] == '-') arr[i][j] = 1;
}
//in
for (int i = 1; i <= 16; i++){
for (int j = 1; j <= 16 - i + 1; ++j)
search(arr, j, i);
}
return 0;
}
相关文章推荐
- [POJ2965]The Pilots Brothers' refrigerator【枚举】
- POJ2965《The Pilots Brothers' refrigerator》方法:DFS+Bit
- poj2965 The Pilots Brothers\' refrigerator
- POJ 2965 The Pilots Brothers' refrigerator(暴力搜索)
- poj2965 The Pilots Brothers' refrigerator
- poj2965 The Pilots Brothers' refrigerator
- poj2965 The Pilots Brothers' refrigerator
- poj2965-The Pilots Brothers' refrigerator
- POJ2965 The Pilots Brothers' refrigerator (精妙方法秒杀DFS BFS)
- POJ2965 The Pilots Brothers' refrigerator dfs
- 暴力枚举-POJ2965 The Pilots Brothers' refrigerator
- POJ2965 The Pilots Brothers' refrigerator 枚舉題目
- poj2965--The Pilots Brothers' refrigerator
- POJ2965-The Pilots Brothers' refrigerator
- poj2965-poj2965-The Pilots Brothers' refrigerator
- POJ2965 The Pilots Brothers' refrigerator(枚举)
- POJ_2965_The Pilots Brothers' refrigerator_生生搜索
- 【枚举】POJ1753 Flip Game&POJ2965 The Pilots Brothers' refrigerator
- POJ2965-The Pilots Brothers' refrigerator
- POJ2965-The Pilots Brothers' refrigerator