POJ-1753(递归枚举)
来源:互联网 发布:淘宝伴侣 一个桃子 编辑:程序博客网 时间:2024/06/03 08:32
题目链接:http://poj.org/problem?id=1753
题目大意:有4*4的正方形棋盘,里面有黑白棋子,我们翻转一个棋子会改变它本身以及周围棋子的颜色,求最少多少步可以把所以棋子翻成同色。
思路:首先判断棋盘本身是否为纯色,如果是输出0。
从挑出1个棋子翻转开始,挑出2个翻转,3个,4个……16个,共有2的16次方种翻转方法。
在翻转过程中若已经达成纯色则跳出循环输出答案。
若翻转16个棋子还是没有变成纯色则输出impossible。
代码如下:
#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>using namespace std;int panduan(int bitss[]){ for(int i=0;i<15;i++) { if(bitss[i]!=bitss[i+1]) return 0; } return 1;}void fanzhuan(int num2[],int t){ num2[t]=-num2[t]; if(t-4>=1) num2[t-4]=-num2[t-4]; if(t+4<=16) num2[t+4]=-num2[t+4]; if(t+1<=16) num2[t+1]=-num2[t+1]; if(t-1>=1) num2[t-1]=-num2[t-1];}void combine(int* arr, int len, int* result, int count, const int NUM, int* last){ int i; for (i=len;i>=count;i--) { result[count-1]=i-1; if (count>1) {combine(arr, i - 1, result, count - 1, NUM, last);} else { int j = 0; int new_arr[20]; for (j = 0; j < 16; j++) { new_arr[j] = arr[j]; } for (j = NUM - 1; j >=0; j--) { fanzhuan(new_arr,result[j]); } if (panduan(new_arr)==1) { *last = NUM; break; } } }}int main(){ int bits[20]; int m=15; char str[5]; for(int i=1;i<=4;i++) { scanf("%s",str); for(int j=0;j<4;j++) { if(str[j]=='b') {bits[m]=1;m--;} else {bits[m]=-1;m--;} } } if (panduan(bits)==1) cout<<"0"<<endl; else { int new_bits[20]; for (int i=0;i<16;i++) { new_bits[i] = bits[i]; } int j; int last = 0; for (j = 1; j <= 16; j++) { int* result = (int*)malloc(sizeof(int)*j); combine(new_bits,16,result,j,j,&last); if (last == j) { printf("%d\n", last); break; } for (int i=0;i<16;i++) { new_bits[i] = bits[i]; } } if (j == 17) { printf("Impossible\n"); } } return 0;}
阅读全文
0 0
- POJ 1753 递归枚举
- POJ-1753(递归枚举)
- POJ 1753 Flip Game (递归枚举)
- POJ 1753 Flip Game (递归枚举)
- POJ 1753 Flip Game (递归枚举)
- POJ 1753 枚举
- poj 1753 枚举+深搜
- poj 1753 flip[ 枚举 ]
- POJ 1753 枚举
- poj 1753 枚举
- POJ 1753(枚举)
- POJ 1753 dfs+枚举
- poj 1753 枚举+dfs
- POJ 3600 Subimage Recognition【递归DFS + 模拟枚举】
- POJ 1753 Flip Game 枚举
- POJ 1753 枚举二进制+BFS
- POJ 1753 Flip Game (枚举)
- poj 1753 枚举加dfs
- 用vue2时遇到的各类问题总结
- springboot无法注入JpaRepository的问题
- win7系统安装ElasticSearch
- sringMVC和mybatis的相关配置
- Eclipse中安装PyDev
- POJ-1753(递归枚举)
- js if for 详解 获取元素方式 及一些js 基础知识
- Oracle数据库--存储过程
- Unity《干货收集(持续收集中)》
- 导入导出Excel
- 使用迭代器删除集合的元素抛出异常
- L2-024. 部落
- MySQL游标修改记录——解决最后一行重复的问题
- ExtJS 4.2 清除grid选中项