poj2965解题报告
2015-09-12 11:05
357 查看
摘要:这个题和翻棋盘的题目几乎一样,注意差别在于需要输出路径,因此DFS使得编程方便.注意如果使用BFS,你很难去记录每条路径上所做的决策.
#include "iostream" #include "string.h" using namespace std; int minroute[16],board[16]; int Minstep = 17; bool success() { for(int i = 0;i<=15;i++) { if(board[i]!=1)//每一个开关都要处于1(open) return false; } return true; } void flip(int index) { int i,j; board[index] = !board[index]; i= index/4, j = 0; while(j<=3) { board[i*4+j] = !board[i*4+j]; j++; } j = index-4*i, i = 0; while(i<=3) { board[i*4+j] = !board[i*4+j]; i++; } } void Find(int index,int step,int route[16])//top用来存储路径的下标 { if(success()) { if(step < Minstep) { memcpy(minroute,route,sizeof(int)*step); minroute[step] = -1; Minstep = step; } return; } if( index==16) { return; } flip(index); route[step] = index; Find(index+1,step+1,route);//本次翻转 flip(index); Find(index+1,step,route);//本次不翻转 } int main() { char c; for(int i = 0;i<=3;i++) { for(int j =0;j<=3;j++) { cin >> c; if(c == '+') board[i*4+j] = 0; else board[i*4+j] = 1;//开 } } int route[16]; int row,col; Find(0,0,route); cout<<Minstep<<endl; for(int index = 0;minroute[index]!=-1;index++) { row = (minroute[index])/4; col = minroute[index] -row*4; cout<<row+1<<' '<<col+1<<endl; } return 0; }
相关文章推荐
- Nginx性能优化
- Masonry简单使用
- web容器中使用Timer定时器
- Leet Code 21 Merge Two Sorted Lists
- swfit 重载/自定义运算符
- PHP Global变量定义当前页面的全局变量
- Item 26:为什么要推迟变量的定义? Effective C++笔记
- [FromBody]List<string> 用PostMan如何请求
- JAVA-变量
- 如何将一个格林威治字符串时间格式化转换为本地时间
- STL之partial_sum
- c++文件读写
- JPA字段映射(uuid,日期,枚举,@Lob)
- jquery发送手机 验证码倒计时插件 支持页面刷新
- php查找字符是否存在
- redo block header
- 面试常见题
- 《剑指offer》两个链表的第一个公共结点
- Hello 51
- Java HelloWorld