原题

有1234四个数字,每个数字八个。有八种方向的移动,使得操作后中间八个方块的数字相同,求最小操作步数。


对于这种求最小步数的看起来就是dfs的题,就ID-DFS就好了。

//不知道为什么都是IDDFS,我的跑的这么慢……

#include<cstdio>
#include<vector>
using namespace std;
int a[30],in[10]={0,7,8,9,12,13,16,17,18},ans,cnt;
int chg[5][8]={{0},{0,1,3,7,12,16,21,23},{0,2,4,9,13,18,22,24},{0,11,10,9,8,7,6,5},{0,20,19,18,17,16,15,14}};
vector <char> v;
char as[10]=" ABCDFEHG"; int read()
{
int ans=0,fu=1;
char j=getchar();
for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;
if (j=='-') j=getchar(),fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
} int stp()
{
int qwq=0,b[5]={0,0,0,0,0};
for (int i=1;i<=8;i++) b[a[in[i]]]++;
for (int i=1;i<=4;i++) qwq=max(qwq,b[i]);
return 8-qwq;
} bool chk()
{
for (int i=1;i<8;i++)
if (a[in[i]]!=a[in[i+1]]) return 0;
return 1;
} void change(int x)
{
int tmp=a[chg[x][1]];
for (int i=1;i<7;i++)
a[chg[x][i]]=a[chg[x][i+1]];
a[chg[x][7]]=tmp;
} void rechange(int x)
{
int tmp=a[chg[x][7]];
for (int i=7;i>1;i--)
a[chg[x][i]]=a[chg[x][i-1]];
a[chg[x][1]]=tmp;
} void dfs(int x)
{
if (ans) return ;
if (!x)
{
if (chk()) ans=1;
return ;
}
for (int i=1;i<=4;i++)
{
change(i);
if (stp()<=x) dfs(x-1);
if (ans)
{
v.push_back(as[i]);
return ;
}
rechange(i);
}
for (int i=2;i>=1;i--)
{
rechange(i);
if (stp()<=x) dfs(x-1);
if (ans)
{
v.push_back(as[i+4]);
return ;
}
change(i);
}
for (int i=4;i>2;i--)
{
rechange(i);
if (stp()<=x) dfs(x-1);
if (ans)
{
v.push_back(as[i+4]);
return ;
}
change(i);
}
} int main()
{
while (1)
{
cnt=0;
ans=0;
v.clear();
a[1]=read();
if (!a[1]) break;
for (int i=2;i<=24;i++)
a[i]=read();
if (chk())
{
printf("No moves needed\n%d\n",a[18]);
continue;
}
while (!ans) dfs(++cnt);
for (int i=v.size()-1;i>=0;i--) putchar(v[i]);
printf("\n%d\n",a[18]);
}
return 0;
}

[poj] 2286 The Rotation Game || ID-DFS的更多相关文章

  1. POJ 2286 The Rotation Game(IDA*)

    The Rotation Game Time Limit: 15000MS   Memory Limit: 150000K Total Submissions: 6396   Accepted: 21 ...

  2. POJ 2286 The Rotation Game IDA*

    (再一次感谢学长幻灯片) ID A* 随便自己yy了一下. 额嗯 思路什么的都没有问题 就是改不对.. 无奈地删代码...边删边交. 删啊删 哎呦 AC了 ... ... ... 找删的那一段 . o ...

  3. POJ - 2286 - The Rotation Game (IDA*)

    IDA*算法,即迭代加深的A*算法.实际上就是迭代加深+DFS+估价函数 题目传送:The Rotation Game AC代码: #include <map> #include < ...

  4. POJ 2286 The Rotation Game 迭代搜索深度 + A* == IDA*

    感觉这样的算法还是比較局限的吧,反复搜索是一个不好的地方,并且须要高效的估值函数来进行强剪枝,这点比較困难. 迭代搜索深度是一个比較炫酷的搜索方式,只是有点拿时间换空间的感觉. 首先迭代深度比較搓的写 ...

  5. 【POJ 2286】 The Rotation Game

    [题目链接] http://poj.org/problem?id=2286 [算法] IDA* [代码] #include <algorithm> #include <bitset& ...

  6. The Rotation Game (POJ 2286) 题解

    [问题描述] (由于是英文的,看不懂,这里就把大意给大家说一下吧……都是中国人,相信大家也不愿意看英文……) 如图,一个井字形的棋盘,中间有着1-3任意的数,有ABCDEFGH八个操作,每个操作意味着 ...

  7. POJ 3321 树状数组(+dfs+重新建树)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27092   Accepted: 8033 Descr ...

  8. POJ 3009 Curling 2.0 回溯,dfs 难度:0

    http://poj.org/problem?id=3009 如果目前起点紧挨着终点,可以直接向终点滚(终点不算障碍) #include <cstdio> #include <cst ...

  9. poj 1564 Sum It Up (DFS+ 去重+排序)

    http://poj.org/problem?id=1564 该题运用DFS但是要注意去重,不能输出重复的答案 两种去重方式代码中有标出 第一种if(a[i]!=a[i-1])意思是如果这个数a[i] ...

随机推荐

  1. Java - 基础数据类型的极值

  2. Redis ----------String的操作

    set    key   value 设置key对应的值为String类型的value mset    key   value 一次设置多个 key对应的值 mget    key   value 一 ...

  3. LAMP架构的搭建

    什么是LAMP架构? L : Linux,2.6.18-308.el5(redhat5.8) A :Apache,httpd 2.4.4 M :  mysql-5.5.28  P : php-5.4. ...

  4. Makefile (2) gdb

    gdb调试 1.用debug的方式编译 -g 2.打上断点 3.单步调试 step into 进入函数里面 step over 运行整个函数 step return 跳出当前函数 4.继续运行 5.打 ...

  5. 笔记-python-lib-chardet

    笔记-python-lib-chardet 1.      chardet chardet是一个非常优秀的编码识别模块, 是python的第三方库,需要下载和安装. 文档地址:https://pypi ...

  6. 亲手搭建一个基于Asp.Net WebApi的项目基础框架1

    目标:教大家搭建一个简易的前后端分离的项目框架. 目录: 1:关于项目架构的概念 2:前后端分离的开发模式 3:搭建框架的各个部分 这段时间比较闲,所以想把之前项目里用到的一些技术写到博客里来,分享给 ...

  7. nohup 重定向的问题-- 费元星 站长

    费元星 大牛 以前只知道使用nohup可以让一个程序后台执行,但是生成的日志文件都放到nohup.out中了,不能自己指定,尤其是在同一个目录下我需要让两个甚至多个程序都要后台执行时,这样看日志就比较 ...

  8. phpStorm9.0 +xampp+chrome php调试环境配置!

    不多说,直接上step by step: 1.xampp配置 看看我的XAMPP版本: 修改配置文件,该打开打开,该加上加上,结果如下(当前需要重新启动apache,配置才会生效): [XDebug] ...

  9. Node应用进程管理器pm2的使用

    本文转载自:豆瓣-PM2介绍 更多内容见github上的pm2说明文档pm2 pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程 ...

  10. JMeter学习笔记(十一) 关于 CSV Data Set Config 的 Sharing mode 对取值的影响

    关于 CSV Data Set Config 的一些介绍之前已经梳理过了,可以参考: https://www.cnblogs.com/xiaoyu2018/p/10184127.html . 今天主要 ...