POJ 1753 FlipGame
来源:互联网 发布:qt编程教程 编辑:程序博客网 时间:2024/06/17 13:29
这道题和之前做的熄灯问题很像,但还是花了很长时间,可能现在使用的算法还不是很好,等有时间再看看有什么其它好的解法。
犯的几个错误:
1、在做枚举的时候,终止条件设成了Press[1][4] ==1
2、第二次枚举之前,没有将Press数组重置
3、输入数据的时候 用%c一个一个输入,这样的话会将回车也算到数组当中去,导致赋值不正确
真的需要多练习啊
#include <iostream>#include <stdio.h>using namespace std;const int Row = 5;const int Col = 6;int MinStep = 1000;int Puzzle[Row][Col] = {0};int Press [Row][Col] = {0};char status[4][4];int Guess(){//根据初始状态得出Press数组for(int i = 2; i < Row ;i++){for(int j = 1 ;j < Col - 1; j++){Press[i][j] = (Puzzle[i-1][j] + Press[i-2][j] + Press[i-1][j-1] + Press[i-1][j] + Press[i-1][j+1]) % 2 ;}}//根据Press数组得出最后一行的状态 for(int i =1; i< Col -1; i++){if(Puzzle[4][i] != (Press[3][i] + Press [4][i-1] + Press[4][i]+ Press[4][i+1])%2 )return -1;}int step = 0;for(int i = 1;i <= 4; i++){for(int j =1; j<=4 ;j++){if(Press[i][j] == 1)step ++ ;}}return step;}void Enumerator(){int result = Guess();if(result >= 0 && result < MinStep)MinStep = result;while(1){int j = 1;Press[1][j]++;while(Press[1][j] == 2){Press[1][j+1]++;Press[1][j] = 0;j = j+1;}result = Guess();if(result >= 0 && result < MinStep)MinStep = result;if(Press[1][5]==1)break;}}int main(){char c;for(int i =0 ;i <4;i++){scanf("%s",&status[i]);} for(int i=0 ;i<4;i++){for(int j=0; j<4;j++){if(status[i][j] == 'b')Puzzle[i+1][j+1] = 1;elsePuzzle[i+1][j+1] = 0;}}Enumerator();int nStep1 = MinStep;MinStep = 1000;for(int i=0 ;i<4;i++){for(int j=0; j<4;j++){if(status[i][j] == 'w')Puzzle[i+1][j+1] = 1;elsePuzzle[i+1][j+1] = 0;}}for(int i =0 ;i<Row;i++){for(int j =0 ; j<Col;j++)Press[i][j] = 0;}Enumerator();int nStep2 = MinStep;int nStep = (nStep1 > nStep2) ? nStep2:nStep1;if(nStep == 1000)cout<<"Impossible"<<endl;elsecout<<nStep<<endl;}
0 0
- POJ 1753 FlipGame
- POJ 1753 FlipGame
- FlipGame
- poj1753 FlipGame
- FlipGame(SRM544-div1-2)
- poj1753--flipgame---位运算 + bfs
- FlipGame终于AC了(位运算方法)
- FlipGame循环解法(此方法未能体现bfs精髓,有冗余之处)
- poj 3279 poj 1753
- POJ 1753
- poj&&1753
- poj 1753
- poj 1753
- POJ-1753
- poj-1753
- poj 1753
- poj 1753
- poj 1753
- HTML中Id和Name的区别
- Android-Universal-Image-Loader图片异步加载类库使用方法
- hdu 2161 Primes 素数打表
- 解析URL
- haoboke
- POJ 1753 FlipGame
- AS3相关(1)
- 如何在显示一个activity的时候同时弹出软键盘
- HEVC 帧间预测技术总结
- sql 判断 函数 存储过程是否存在的方法
- HDU 2191:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【01背包】
- POJ 3276 Face The Right Way (常用技巧-尺取法)
- 怎么获取键盘的高度
- Codevs 1022 覆盖