UVA - 1343(IDA*(迭代加深搜索)为什么会很快原因待解 )
来源:互联网 发布:局域网共享上网软件 编辑:程序博客网 时间:2024/05/02 03:02
#include <cstdio>#include <cstring>#include <iostream>#include <vector>using namespace std;const int a[8][7]={{ 0, 2,6,11,15,20,22}, //ABCDEFGH in order 按顺序填写个状态{ 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}};const int rev[8]={5,4,7,6,1,0,3,2};const int center[8]={6,7,8,11,12,15,16,17};int st[24],te[24];bool is_goal(){for(int i=0;i<8;i++) if(st[center[i] ]!=st[center[0] ]) return false;return true;}inline void move(int i){int temp=st[a[i][0]];for(int j=0;j<6;j++) st[a[i][j]]=st[a[i][j+1]];st[a[i][6]]=temp;}int diff(int val){int num=0;for(int i=0;i<8;i++) if(st[center[i]]!=val) num++;return num;}inline int h(){return min(min(diff(1),diff(2)),diff(3));}char ans[100],kk;bool dfs(int d,int maxd){if(is_goal()){ ans[kk]='\0'; puts(ans); printf("%d\n",st[center[0]]); return true;}if(d+h()>maxd) return false;for(int i=0;i<8;i++){ans[kk++]='A'+i;move(i);if(dfs(d+1,maxd)) return true;move(rev[i]);kk--;}return false;}int main(){ while(scanf("%d",&te[0])&&te[0]){ for(int i=1;i<24;i++){ scanf("%d",&te[i]); } int maxd; for(int i=0;i<24;i++) {st[i]=te[i]; if(te[i]==0) return 0;} if(is_goal()) { printf("No moves needed\n%d\n",te[center[0]]); } else { for(int i=0;i<24;i++) st[i]=te[i]; for(maxd=1;;maxd++){ kk=0; if(dfs(0,maxd)) break; } } } return 0;}
0 1
- UVA - 1343(IDA*(迭代加深搜索)为什么会很快原因待解 )
- uva 11212 - Editing a Book(迭代加深搜索 IDA*) 迭代加深搜索
- IDA*,迭代加深搜索(编辑书稿,uva 11212)
- 埃及分数 迭代加深搜索 IDA*
- HDU 1560 IDA*(迭代加深搜索)
- 迭代加深搜索 (IDA*)
- UVA 1374 迭代加深搜索
- POJ 2286 The Rotation Game 搜索-IDA*+迭代加深
- hdu 1560 IdA* 迭代加深A星搜索
- 埃及分数问题-迭代加深搜索与IDA*算法
- hdu1667-IDA*-迭代加深搜索 A*算法
- 迭代加深搜索--IDA*--uva11212 Editing a book
- 迭代加深搜索IDA*---uva1343 the rotation game
- 迭代加深搜索
- 迭代加深搜索
- 搜索-迭代加深
- UVa 529 - Addition Chains ,迭代加深搜索+减枝
- [UVA 529] Addition Chains (迭代加深搜索)
- Java通过Class的对象来获取泛型的class示例
- ubuntu14.04安装输入法
- My Ruby Blog
- Hibernate--根据实体类获得表名、主键名、字段名(与Spring集成)(一)
- 跟我一起学extjs5(38--单个模块的设计[6取得模块列表数据])
- UVA - 1343(IDA*(迭代加深搜索)为什么会很快原因待解 )
- 零基础学python(一)
- 菜鸟DirectX之DirectX初始化
- ZOJ 3822 Domination(概率dp)
- poj 3669
- 【经典dp】n数填m空,括号序列取第k项,最长非降序列计数及枚举,最短编辑距离
- 持久化类设计
- error MSB3073: 修改地方
- 调试常用的 __FILE__, __FUNCTION__, __LINE__