Problem 1006 - 转盘游戏
Time Limit: 1000MS   Memory Limit: 65536KB   Difficulty:
Total Submit: 87  Accepted: 42  Special Judge: No
Description

  wm最近喜欢上一种无聊的转盘解锁游戏,他每天都会为这游戏消磨上三个小时的时间。这游戏由三个正六边形拼成,拼成后一共有13个点,其中有4个黑点和9个白点,如下图。每一步可以顺时针或逆时针转动三个六边形的任意一个60度,转动时六边形的顶点也会相应转动,而这游戏的目的是把四个黑点都转到中间(图中最后一个状态)。这是一个很简单的游戏,想达到游戏目的并不难,但wm觉得这样没挑战性,他决定对于任意一个初始状态,用最少的步数去玩这个游戏。

Input
  输入包含多组数据(500组),EOF结束。
  每组数据都只有一行13个字符的01串,以从上到下,从左到右的点的顺序表示初始状态(这个由三个正六边形拼成图形最上面一排两个点编号为1 2,第二排三个点编号为3 4 5,依此类推,最后一个点编号为13。第一组样例为上图的初始状态),其中1表示黑点0表示白点。
Output
  每组数据输出一行,解出游戏需要的最小步数。
Sample Input
0000000101011
1011000001000
Sample Output
3
2
Hint
 
Source
2010.04内部测试赛
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
int step;
int state[];
};
int shift[][]={{,,,,,},{,,,,,},{,,,,,}};
char str[];
bool f[];
int encode(node x)
{
int i,ans=;
for (i=;i<=;i++) ans=ans*+x.state[i];
return ans;
}
bool finish(node x)
{
if (x.state[]==) return false;
if (x.state[]==) return false;
if (x.state[]==) return false;
if (x.state[]==) return false;
return true;
}
int bfs()
{
queue<node> q;
while (!q.empty()) q.pop();
memset(f,false,sizeof(f));
node s,tmp;
int i,j,t;
for (i=;i<=;i++) s.state[i]=str[i]-;
s.step=;
q.push(s);
f[encode(s)]=true;
while (!q.empty())
{
s=q.front();
q.pop();
if (finish(s)) return s.step;
for (i=;i<;i++)
{
tmp=s;
for (j=;j<;j++) tmp.state[shift[i][(j+)%]]=s.state[shift[i][j]];
tmp.step++;
t=encode(tmp);
if (!f[t])
{
f[t]=true;
q.push(tmp);
}
//shift[i][(j+1)%6]<-shift[i][j]
tmp=s;
for (j=;j<;j++) tmp.state[shift[i][(j+)%]]=s.state[shift[i][j]];
tmp.step++;
t=encode(tmp);
if (!f[t])
{
f[t]=true;
q.push(tmp);
}
//shift[i][j]->shift[i][(j+5)%6]
}
}
return -;
}
int main()
{
while (scanf("%s",&str[])!=EOF)
{
scanf("%s",&str[]);
int ans=bfs();
printf("%d\n",ans);
}
return ;
}

转盘游戏[XDU1006]的更多相关文章

  1. 题解西电OJ (Problem 1006 - 转盘游戏)--动态规划

    题目链接 : http://acm.xidian.edu.cn/land/problem/detail?problem_id=1006 Description wm最近喜欢上一种无聊的转盘解锁游戏,他 ...

  2. js转盘游戏

    1----- @-webkit-keyframes spin { 0%   { -webkit-transform: rotate(0deg); -ms-transform: rotate(0deg) ...

  3. js实现游戏转盘抽奖

    <!DOCTYPE html> <html> <head> <title>js抽奖</title> <meta charset=&qu ...

  4. Qt项目开发实例 (含源码)

    源码传送门: 啊渊 / QT博客案例 · GitCode 目前QT的研发都是基于windows操作系统的,本文分享在国产操作系统中学QT的路线图,其实学习路线差不多,为了全面的回顾自己的学习知识,打算 ...

  5. Python开发转盘小游戏

    Python开发转盘小游戏 Python  一 原理分析 Python开发一个图形界面 有12个选项和2个功能键 确定每个按钮的位置 每个按钮的间隔相同 点击开始时转动,当前选项的背景颜色为红色,其他 ...

  6. iOS 转盘抽奖游戏(原生)

    转盘抽奖游戏在一般的app中都会有,应该算是一种吸引用户的一种手段.在项目中集成转盘抽奖游戏,大都采用h5的方式来实现,但是由于项目需求,需要在app中使用原生来实现转盘抽奖.实现原理也很简单,中间的 ...

  7. 游戏中转盘概率的算法---python实现

    加入转盘的内容及概率如下 转盘倍数 0.5 0.6 0.7 0.8 1 1.2 1.5 1.8 2 机率 0.2 0.15 0.15 0.2 0.2 0.1 0.1 0.05 0.05 下面来实现转盘 ...

  8. js实现大转盘抽奖游戏实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 简单的转盘抽奖——CSS动画优化

    前言 前两天去一家公司面试,被问到一些小游戏的东西.面试官提到了刷红包还有抽奖这些怎么实现,当时简单说了下思路,回来之后想想还是说的太轻描淡写了,干说不做就是耍流氓,所以就做了一个(Demo & ...

随机推荐

  1. 快还要更快,让PHP 7 运行更加神速

    导读 PHP 7 比5.x 快上很多,即使只有单纯的版本升级就已经很有感,不过大家还是希望它变得越来越快,这时再做些小调整就会更有fu,Let's try it! 事前准备 说到PHP 7,那一定跑不 ...

  2. myeclipse2014安装反编译插件

    一.在线安装方式: Eclipse Class Decompiler整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class Viewer无缝集成,能够很方便的使 ...

  3. ubuntu硬盘安装卡在探测文件系统

    在硬盘安装ubuntu的时候,会出现这样的问题:安装程序一直卡在正在探测文件系统就不动了.解决的方法很简单.在安装之前要在终端输入sudo空格umount空格 -l空格 /isodevice 不能少一 ...

  4. linux 下如何查看和踢除正在登陆的其它用户 ==>Linux下用于查看系统当前登录用户信息的4种方法

    在linux系统中用pkill命令踢出在线登录用户 由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍 所以需要有时踢出指定的用户 1/#who   查出当前有那些终端登录(用 ...

  5. [MySQL] - MySQL的Grant命令

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...

  6. Python——内置类型

    Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buf ...

  7. iOS两个框架之间的类型转换--"桥接"技术

    话不多说,直接举例说明吧.场景模拟:需要开发一个通讯录相关功能,实现访问以及添加等等.这时,需要使用的框架是Core Foundation.而此框架使用的是C语言,例如:CFArrayRef,CFSt ...

  8. FZU 2148 moon game (计算几何判断凸包)

    Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  9. JDK1.7 HashMap 源码分析

    概述 HashMap是Java里基本的存储Key.Value的一个数据类型,了解它的内部实现,可以帮我们编写出更高效的Java代码. 本文主要分析JDK1.7中HashMap实现,JDK1.8中的Ha ...

  10. [Java基础] SequenceInputStream输入合并流

    转载: http://blog.csdn.net/xuefeng1009/article/details/6955707 public SequenceInputStream(Enumeration& ...