翻格子游戏
来源:互联网 发布:nba2konline奥登数据 编辑:程序博客网 时间:2024/04/30 17:32
前几天,朋友玩一个解谜类的游戏。中间有一个关卡,大概是这样的:
有一个5*5的板子,初始时,每个格子都是背面朝上。我们可以手动翻转任意一个格子,但其上下左右——如果有的话——的格子也会随之一起翻转,问怎么翻,可以将所有格子都翻到正面朝上。
当时蛮无聊,那就写段代码试试看吧。
这里,手动翻我们定义为主动,而被动当然就很清楚了。
不难想到,对任意一个格子来说,我们主动翻N次和N+2次的结果是一样的。因此,任何一种解决方案都是将每个格子主动翻0或1次。而且,翻格子的先后顺序也是无所谓的。于是,想到一种简单粗暴的办法,穷举呗,一共2^25种情形。
不多说,直接上代码。
#include <stdio.h>#include <stdlib.h>#include <math.h>int validate(int data, int index, int dimension){int ret;ret = (data >> index)&0x01;//leftif(index%dimension > 0)ret ^= (data >> (index-1))&0x01;//rightif(index%dimension < dimension-1)ret ^= (data >> (index+1))&0x01;//upif(index/dimension > 0)ret ^= (data >> (index-dimension))&0x01;//downif(index/dimension < dimension-1)ret ^= (data >> (index+dimension))&0x01;return ret;}int resolve(int data, int d){int ret = 0;int i;for (i=0; i<d*d; i++) {ret = validate(data, i, d);if (!ret)return 0;}return ret;}int main(){int map=0;int ret = -1;int d = 5;for (map=0; map<pow(2,d*d); map++) {ret = resolve(map, d);if (ret) {printf("%x\n", map);}}return 0;}
解决方案采用25个bit来描述,每个bit,1表示主动翻,0表示不主动翻。采用位操作不仅节省了空间,而且提高了效率。
结果发现,解决方案不止一种。
当然,需要注意的是,如果6*6的格子,用32bit整型会导致溢出。
0 0
- 翻格子游戏
- Fliptile 翻格子游戏
- [bzoj1647][Usaco2007 Open]Fliptile 翻格子游戏
- [Usaco2007 Open]Fliptile 翻格子游戏
- BZOJ1647: [Usaco2007 Open]Fliptile 翻格子游戏 Dfs
- POJ 3279/BZOJ 1647: [Usaco2007 Open]Fliptile 翻格子游戏
- BZOJ 1647: [Usaco2007 Open]Fliptile 翻格子游戏 Dfs
- 暴力状压 [Usaco2007 Open]Fliptile 翻格子游戏
- [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩
- [Usaco2007 Open]Fliptile 翻格子游戏 状压dp
- bzoj 1647: [Usaco2007 Open]Fliptile 翻格子游戏(枚举)
- Bzoj 1647: Fliptile 翻格子游戏 状态压缩
- 格子游戏
- 格子游戏
- 格子游戏
- 格子游戏 解题报告
- ssl2340 格子游戏
- 书上例题 格子游戏
- ActionScript 3 单例模式
- 适配器 -- 不兼容结构的协调
- winform登陆后关闭登录窗口跳转到主窗体
- 剖析easyui tree源码(设计原理)来学习easyui
- Redis-API实例
- 翻格子游戏
- Linux下DRBD配置
- JAVA 设计模式-适配器模式
- Kettle 采用JNDI方式报Required subelement 'driver'
- 【转】BIEE RPD建模的20条黄金法则
- CentOS6.4 LVS+keepalived高可用负载均衡服务配置
- §第一天§简单介绍一下Python的安装与开发环境的搭建
- 小s女儿被骂很土引骂战 小S您身为妈妈到底有何感想
- Windows下QT+VS2012环境搭建