当前位置: 首页 > news >正文

POJ 2286 The Rotation Game IDA*

这个题用IDA*算法比较好,代码量也比A*小,空间消耗也小。

估价函数也比较好找,就是中间8个方格距离这8个方格同数的最短距离。

#include<stdio.h> #include<stdlib.h> #include<string.h> int init[30]; int sol[1010]; int bound; bool ans; int final; int e[8]={6,7,8,11,12,15,16,17}; int re[8]={5,4,7,6,1,0,3,2}; int cha[4][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}; int Max(int a,int b){ return a>b?a:b; } int Min(int a,int b){ return a<b?a:b; } int h(int *a){ int i; int b=0,c=0,d=0; for(i=0;i<8;i++){ if(a[e[i]]==1) b++; else if(a[e[i]]==2) c++; else if(a[e[i]]==3) d++; } return 8-Max(b,Max(c,d)); } void change(int dir,int * tmp){ int i; if(dir<4){ int temp=tmp[cha[dir][0]]; for(i=1;i<7;i++) tmp[cha[dir][i-1]]=tmp[cha[dir][i]]; tmp[cha[dir][6]]=temp; } else{ int temp=tmp[cha[re[dir]][6]]; for(i=6;i>0;i--) tmp[cha[re[dir]][i]]=tmp[cha[re[dir]][i-1]]; tmp[cha[re[dir]][0]]=temp; } } int dfs(int * a,int depth,int premove){ int hdepth,i,j; hdepth=h(a); if(hdepth+depth>bound) return hdepth+depth; if(hdepth==0){ ans=true; final=a[6]; return depth; } int next_bound=1e7; for(i=0;i<8;i++){ if(re[i]==premove) continue; int tmp[30]; for(j=0;j<24;j++) tmp[j]=a[j]; change(i,tmp); sol[depth]=i; int new_bound=dfs(tmp,depth+1,i); if(ans) return new_bound; else next_bound=Min(new_bound,next_bound); } return next_bound; } void IDA_STAR(){ memset(sol,0,sizeof(sol)); bound=h(init); ans=false; while(!ans && bound<=100){ bound=dfs(init,0,-100); } for(int i=0;i<bound;i++) printf("%c",sol[i]+'A'); printf("\n"); printf("%d\n",final); } int main(){ int i,j; while(scanf("%d",&init[0]) && init[0]!=0){ for(i=1;i<24;i++) scanf("%d",&init[i]); if(h(init)==0){ printf("No moves needed\n"); printf("%d\n",init[6]); continue; } IDA_STAR(); } }


相关文章:

  • LeetCode 67. Add Binary
  • HDU 4016 Magic Bitwise And Operation 暴搜+剪枝
  • 20165314 2016-2017-2 《Java程序设计》第3周学习总结
  • HDU 4090 GemAnd Prince 暴搜+剪枝
  • XML作用
  • ReportViewer:隐藏和GetDefaultPageSettings
  • ETL总结(扫盲版)
  • sql server 内置MD5加密函数
  • POJ 1011 Sticks 强大的剪枝
  • 2018/3/20 noip模拟赛 5分
  • windows2003 with OpenSSH
  • java和c#通过esb服务互调用组件
  • 4、自定义cookieHandler发送请求
  • python 魔法方法补充(__setattr__,__getattr__,__getattribute__)
  • /*在DataTable中更新、删除数据*/
  • [PHP内核探索]PHP中的哈希表
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 07.Android之多媒体问题
  • Android 控件背景颜色处理
  • CAP理论的例子讲解
  • co.js - 让异步代码同步化
  • Javascript基础之Array数组API
  • Redis中的lru算法实现
  • Redis字符串类型内部编码剖析
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Web设计流程优化:网页效果图设计新思路
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端js -- this指向总结。
  • 巧用 TypeScript (一)
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 学习Vue.js的五个小例子
  • 用jquery写贪吃蛇
  • 在Mac OS X上安装 Ruby运行环境
  • 正则学习笔记
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 【干货分享】dos命令大全
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (10)ATF MMU转换表
  • (9)目标检测_SSD的原理
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计ssm电影分享网站
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .equals()到底是什么意思?
  • .net core控制台应用程序初识
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NetCore 如何动态路由
  • .net下的富文本编辑器FCKeditor的配置方法
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @AutoConfigurationPackage的使用
  • @RequestMapping处理请求异常