(再一次感谢学长幻灯片)

ID A* 随便自己yy了一下。

额嗯 思路什么的都没有问题 就是改不对。。

无奈地删代码。。。边删边交。 删啊删

哎呦 AC了

。。。

。。。

。。。

找删的那一段 。

oh

原来 d[i]^1!=f 要改成(d[i]^1)!=f 优先级问题 无奈了。。

#include<cstdio>
#include<algorithm>
using namespace std;
char t,a[25],b[25],d[]={0,2,4,7,3,1,6,5},ch[]={7,8,9,12,13,16,17,18};
char R[8][7]={{1,3,7,12,16,21,23},{23,21,16,12,7,3,1},{2,4,9,13,18,22,24},{24,22,18,13,9,4,2},{11,10,9,8,7,6,5},{5,6,7,8,9,10,11},{14,15,16,17,18,19,20},{20,19,18,17,16,15,14}};
void r(int x){
int jy=a[R[x][0]];
for(char i=1;i<7;i++)a[R[x][i-1]]=a[R[x][i]];
a[R[x][6]]=jy;
}
bool check(){
for(int i=1;i<=7;i++)
if(a[ch[i]]!=a[ch[0]])return 0;
return 1;
}
char g(){
char cnt[]={0,0,0};
for(char i=0;i<=7;i++)cnt[a[ch[i]]-1]++;
return 8-max(cnt[0],max(cnt[1],cnt[2]));
}
bool dfs(char f,char x){
if(x>t)return 0;
for(char i=0;i<8;i++)
if((d[i]^1)!=f&&g()+x<=t+1){
r(d[i]);
b[x]=i+'A';
if(check()||dfs(d[i],x+1))return 1;
r(d[i]^1);
}
return 0;
}
int main(){
while(scanf("%d",&a[1])&&a[1]){
for(char i=2;i<=24;i++)scanf("%d",&a[i]);
if(check()){printf("No moves needed\n%d\n",a[ch[0]]);continue;}
for(t=1;;t++)if(dfs(10,1))break;
for(char i=1;i<=t;i++)printf("%c",b[i]);
printf("\n%d\n",a[ch[0]]);
}
}
// by Sirius_Ren
#include <cstdio>
using namespace std;
short t,a[25],b[25],d[]={0,2,4,7,3,1,6,5},ch[]={7,8,9,12,13,16,17,18};
short R[8][7]={{1,3,7,12,16,21,23},{23,21,16,12,7,3,1},{2,4,9,13,18,22,24},{24,22,18,13,9,4,2},{11,10,9,8,7,6,5},{5,6,7,8,9,10,11},{14,15,16,17,18,19,20},{20,19,18,17,16,15,14}};
void r(int x){int jy=a[R[x][0]];for(int i=1;i<7;i++)a[R[x][i-1]]=a[R[x][i]];a[R[x][6]]=jy;}
short max(short a,short b,short c){int t=a>b?a:b;return t>c?t:c;}
bool check(){for(int i=1;i<=7;i++)if(a[ch[i]]!=a[ch[0]])return false;return true;}
short g(){
int cnt[]={0,0,0};
for(int i=0;i<=7;i++)cnt[a[ch[i]]-1]++;
return 8-max(cnt[0],cnt[1],cnt[2]);
}
bool dfs(int f,int x){
if(x>t)return false;
for(int i=0;i<8;i++)
if((d[i]^1)!=f&&g()+x<=t+1){
r(d[i]);
b[x]=i+'A';
if(check()||dfs(d[i],x+1))return true;
r(d[i]^1);
}
return false;
}
int main(){
while(scanf("%d",&a[1])&&a[1]){
for(int i=2;i<=24;i++)scanf("%d",&a[i]);
if(check()){printf("No moves needed\n%d\n",a[ch[0]]);continue;}
for(t=1;;t++)if(dfs(10,1))break;
for(int i=1;i<=t;i++)printf("%c",b[i]);
printf("\n%d\n",a[ch[0]]);
}
}



WA 的惨痛教训

最后一次AC 成功把code length刷到第一。

POJ 2286 The Rotation Game IDA*的更多相关文章

  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*)

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

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

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

  4. [poj] 2286 The Rotation Game || ID-DFS

    原题 有1234四个数字,每个数字八个.有八种方向的移动,使得操作后中间八个方块的数字相同,求最小操作步数. 对于这种求最小步数的看起来就是dfs的题,就ID-DFS就好了. //不知道为什么都是ID ...

  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. [poj2286]The Rotation Game (IDA*)

    //第一次在新博客里发文章好紧张怎么办 //MD巨神早已在一个小时前做完了 The Rotation Game Time Limit: 15000MS Memory Limit: 150000K To ...

  8. HUD 1043 Eight 八数码问题 A*算法 1667 The Rotation Game IDA*算法

    先是这周是搜索的题,网站:http://acm.hdu.edu.cn/webcontest/contest_show.php?cid=6041 主要内容是BFS,A*,IDA*,还有一道K短路的,.. ...

  9. POJ 1077 HDU 1043 Eight (IDA*)

    题意就不用再说明了吧......如此经典 之前想用双向广搜.a*来写,但总觉得无力,现在用IDA*感觉其他的解法都弱爆了..............想法活跃,时间,空间消耗很小,给它跪了 启发式搜索关 ...

随机推荐

  1. CPU重要性能参数

    内容来自http://www.360doc.com/content/18/1124/15/60810319_796935567.shtml CPU有几个重要的参数:主频.核心.线程.缓存.架构.那么他 ...

  2. 谈一谈a:link、a:visited、a:hover、a:active的正确使用顺序

    前端路上,未来还远,所以基础部分必须扎实,走好现在脚下的每一步才是现在最重要的. 下面进入正题吧. 1. <a>标签 我们先说一说<a>标签是干啥用的. <a> 标 ...

  3. 学习csv

    1.csv文件读取,csv文件是常用的数据存储格式之一,我们使用Python模块来处理csv文件,这是一个天气信息表 import csv from matplotlib import pyplot ...

  4. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  5. python round()模块

    Python3的round()函数四舍五入取整时,采用最近偶数原则 >>> round(1.5)2>>> round(2.5)2>>> round ...

  6. 使用vscode,新建.vue文件,tab自动生成vue代码模板

    第一步: 新建模板并保存 文件 --> 首选项 --> 用户代码片段 --> 输入vue,选择vue.json -->复制 第三步中的模板内容中内容保存 第二步: 添加配置,让 ...

  7. SCI 计算机 数学相关期刊

    数学,电子通信,计算机类 出版地 收录库 刊名 刊期 ISSN 影响因子 中国大陆 SCI CHINESE SCIENCE BULLETIN<科学通报>(英文版) 半月刊 1001-653 ...

  8. 【hiho一下 第146周】子矩阵求和

    [题目链接]:http://hihocoder.com/contest/hiho146/problem/1 [题意] [题解] 设s[i][j]表示左上角的坐标为(i,j)的n*m的矩阵的和; 有s[ ...

  9. Binary search tree system and method

    A binary search tree is provided for efficiently organizing values for a set of items, even when val ...

  10. 洛谷 P1378 油滴扩展

    P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完 ...