UVA 1343 The Rotation Game

时间:2021-12-03 23:56:51

题意:

  给出图,往A-H方向旋转,使中间8个格子数字相同。要求旋转次数最少,操作序列字典序尽量小。

分析:

  用一维数组存24个方格。二维数组代表每个方向对应的7个方格。IDA*剪枝是当8-8个方格中重复字母最多的那个字母数量>maxd。

代码:

  

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int a[24];
int d[8][7]=
{
{0,2,6,11,15,20,22},
{1,3,8,12,17,21,23},
{10,9,8,7,6,5,4},
{19,18,17,16,15,14,13},
{23,21,17,12,8,3,1},
{22,20,15,11,6,2,0},
{13,14,15,16,17,18,19},
{4,5,6,7,8,9,10},
};
int g[8]={6,7,8,11,12,15,16,17};
int ans;
string p;
bool dfs(int now,int maxd,string path)
{
//cout<<1<<endl;
if(now==maxd)
{
//cout<<maxd<<endl;
int ok=1;
for(int i=1;i<8;i++)
{
if(a[g[i]]!=a[g[i-1]])
{
ok=0;
break;
}
}
if(!ok)
return false;
ans=a[g[0]];
p=path;
return true;
}
int b[3]={0,0,0};
for(int i=0;i<8;i++)
++b[a[g[i]]-1];
int dd=8-max(max(b[0],b[1]),b[2]);
if(now+dd>maxd)
return false;
for(int i=0;i<8;i++)
{
int v=a[d[i][0]];
for(int j=0;j<6;j++)
a[d[i][j]]=a[d[i][j+1]];
a[d[i][6]]=v;
if(dfs(now+1,maxd,path+char(i+'A')))
return true;
v=a[d[i][6]];
for(int j=6;j>0;j--)
a[d[i][j]]=a[d[i][j-1]];
a[d[i][0]]=v;
}
return false;
}
int main()
{
while(scanf("%d",&a[0])&&a[0])
{
for(int i=1;i<24;i++)
scanf("%d",&a[i]);
//cout<<1<<endl;
ans=-1;
for(int maxd=0;;++maxd)
{
if(dfs(0,maxd,""))
{
if(maxd==0)
printf("No moves needed\n");
else
cout<<p<<endl;
printf("%d\n",ans);
break;
}
}
}
}

UVA 1343 The Rotation Game的更多相关文章

  1. UVa 1343 The Rotation Game &lpar;状态空间搜索 &amp&semi;&amp&semi; IDA&ast;&rpar;

    题意:有个#字型的棋盘,2行2列,一共24个格. 如图:每个格子是1或2或3,一共8个1,8个2,8个3. 有A~H一共8种合法操作,比如A代表把A这一列向上移动一个,最上面的格会补到最下面. 求:使 ...

  2. UVA - 1343 The Rotation Game &lpar;BFS&sol;IDA&ast;&rpar;

    题目链接 紫书例题. 首先附上我第一次bfs+剪枝TLE的版本: #include<bits/stdc++.h> using namespace std; typedef long lon ...

  3. UVA 1343 - The Rotation Game-&lbrack;IDA&ast;迭代加深搜索&rsqb;

    解题思路: 这是紫书上的一道题,一开始笔者按照书上的思路采用状态空间搜索,想了很多办法优化可是仍然超时,时间消耗大的原因是主要是: 1)状态转移代价很大,一次需要向八个方向寻找: 2)哈希表更新频繁: ...

  4. 【UVa】1343 The Rotation Game(IDA&ast;)

    题目 题目     分析 lrj代码.... 还有is_final是保留字,害的我CE了好几发.     代码 #include <cstdio> #include <algorit ...

  5. 【例 7-12 UVA - 1343】The Rotation Game

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 每次抽动操作最多只会让中间那一块的区域离目标的"距离"减少1. 以这个作为剪枝. 枚举最大深度. ...

  6. UVA&lowbar;Rotation Game&lt&semi;旋转游戏&gt&semi; UVA 1343

    The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The ...

  7. UVA 1379 - Pitcher Rotation&lpar;DP &plus; 贪心&rpar;

    题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=4125" rel="nofo ...

  8. uva 1343 非原创

    uva1343 原作者 题目题意是:给你的棋盘,在A-H方向上可以拨动,问你最少拨动几次可以是中心图案的数字一致 解题思路:回溯法,剪枝 其中要把每次拨动的字母所代表的位置提前用数组表示: 然后在如果 ...

  9. UVa 1343 旋转游戏(dfs&plus;IDA&ast;)

    https://vjudge.net/problem/UVA-1343 题意:如图所示,一共有8个1,8个2和8个3,如何以最少的移动来使得中间8个格子都为同一个数. 思路:状态空间搜索问题. 用ID ...

随机推荐

  1. MAC的SVN怎么设置允许&period;a文件上传

    首先在mac中svn的安装会去选择Cornerstone 如果遇到这个问题肯定是已经安装并准备上传.a 文件了.首先要清楚svn是默认过滤忽略.a文件的上传的,要想可以上传.a 可以通过这个简单的方法 ...

  2. 【BZOJ 4580】【Usaco2016 Open】248

    http://www.lydsy.com/JudgeOnline/problem.php?id=4580 区间dp,f(i,j)表示区间[i,j]全部合成一个数,这个数是多少. 可以归纳证明[i,j] ...

  3. Linux下监控磁盘使用量并在超过阀值后自动发送报警邮件

    最近Linux服务器磁盘使用量经常到100%,直到影响到正常服务出现故障才会去注意,做不到防患于未然,今天在网上搜集了资料,加上自己修改,写了一个shell脚本用于实时监控磁盘使用量并在超过阀值后自动 ...

  4. python基础-循环

    循环 循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直 ...

  5. SSIS服务无法登录的解决方案

    现象1:登录SSIS报权限认证失败. 授予对 Integration Services 服务的访问权限 运行 Dcomcnfg.exe. Dcomcnfg.exe 提供用于修改注册表中的某些设置的用户 ...

  6. python&colon; ImportError&colon; cannot import name &&num;39&semi;Style&&num;39&semi; from &&num;39&semi;openpyxl&period;styles&&num;39&semi; 解决方法

    import os, openpyxl from openpyxl.styles import Font, Style os.chdir("C:\\") wb = openpyxl ...

  7. django —— 邮件

    官方文档 1.11 配置settings.py # QQ邮箱为例, 其他邮箱对应的SMTP配置可查官方 EMAIL_HOST = "smtp.qq.com" EMAIL_PORT ...

  8. iOS支付宝支付集成

    概述 iOS支付宝支付集成 详细 代码下载:http://www.demodashi.com/demo/10729.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧( ...

  9. Appium&plus;python自动化10-AVD 模拟器

    前言 有些小伙伴没android手机,这时候可以在电脑上开个模拟器玩玩 一.模拟器配置 1.双击启动AVD Manager,进入配置界面

  10. kernel 4&period;4&period;12 移植 HUAWEI MU609 Mini PCIe Module

    首先请参考 http://www.cnblogs.com/chenfulin5/p/6951290.html 上一章刚讲了 kernel 3.2.0 移植 MU609 这一章记录新版kernel 的移 ...