广度优先搜索-Shredding Company(算法基础 第8周)
2016-06-19 20:29
483 查看
问题描述:
分析
没想到怎么用广搜做呀,直接枚举了,做法跟熄灯问题 一样。
源码
分析
没想到怎么用广搜做呀,直接枚举了,做法跟熄灯问题 一样。
源码
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int field[5][6],filp[5][6]; /* 推测验证过程: 根据第一行猜测 */ int guess() { //根据filp第1行和field数组,计算press其他行的值 for (int r=1; r<4; r++) { for (int c=1; c<=4; c++) { filp[r+1][c]=(field[r][c]+filp[r][c]+filp[r-1][c]+filp[r][c-1]+filp[r][c+1])%2; } } //判断所计算的press数组能否将最后一行全变为黄色0 for(int c=1; c<=4; c++) { if ((filp[4][c-1]+filp[4][c]+filp[4][c+1]+filp[3][c])%2 != field[4][c]) { return 1001; } } //算出需要的步数 int steps=0; for (int r=1; r<=4; r++) { for (int c=1; c<=4; c++) { if (filp[r][c]==1) { steps++; } } } return steps; } /* 枚举过程: 对press第1行的元素press[1][1]~press[1][6]的各种取值进行枚举 */ int enumerate() { int minsteps=1001; int steps=0; int c; while (filp[1][5]<1){ steps = guess(); if (steps<minsteps){ minsteps = steps; } filp[1][1]++; c=1; while(filp[1][c]>1) { filp[1][c]=0; c++; filp[1][c]++; } } return minsteps; } int main() { //初始化 memset(field, 0, sizeof(field)); memset(filp, 0, sizeof(filp)); //输入数据 char color; for (int i=1; i<=4; i++) { for (int j=1; j<=4; j++) { cin >> color; field[i][j] = color=='b' ? 0:1; } } int minsteps_first = enumerate(); memset(filp, 0, sizeof(filp)); for (int i=1; i<=4; i++) { for (int j=1; j<=4; j++) { field[i][j] = 1-field[i][j]; } } int minsteps_second = enumerate(); int minsteps=min(minsteps_first, minsteps_second); if (minsteps>1000){ cout << "Impossible" << endl; } else { cout << minsteps << endl; } }
相关文章推荐
- 树左孩子 于右孩子交换
- kaggle | Digit recognizer with caffe
- 47. Spring Boot发送邮件【从零开始学Spring Boot】
- 程序员、技术领导、管理者各有烦恼,你占了几条?ZZ
- 20145227《Java程序设计》课程总结
- 第二章 指南(4.3)添加 View
- asp.net core 中间件详解及项目实战
- Python如何拉平(flatten)嵌套列表(nested list)--(递归生成器)
- Linux如何查看进程、杀死进程、启动进程等常用命令
- Service, Thread, IntentService and AsyncTask 比较
- CSS选择器
- Walker之健康栏目的实现
- Qt creator的下载地址
- Windows和Linux下的目标文件、静态库和动态库
- TimesTen 应用层数据库缓存学习:18. 利用TimesTen实现Sharding或数据分区
- java_web提示错误
- 从苏宁电器到卡巴斯基第02篇:我的本科时光(中)
- Hibernate使用
- linux系统目录介绍
- web开发前端发展阶段