题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2918

思路:这道题与前面几道类似,可以说是被秒杀了!!!构造启发式函数h()=(cnt+3)/4(cnt为不在位的点的个数)。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int map[][];
char str[];
int max_deep; int Get_H()
{
int cnt=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(map[i][j]!=(i-)*+j)cnt++;
return (cnt+)/;
} void MoveL_A()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveR_A()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveL_B()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveR_B()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveL_C()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveR_C()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveL_D()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} void MoveR_D()
{
int tmp=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=map[][];
map[][]=tmp;
} bool IDA_star(int deep)
{
if(Get_H()+deep>max_deep)return false;
if(deep==max_deep)return true; MoveL_A();
if(IDA_star(deep+))return true;
MoveR_A(); MoveR_A();
if(IDA_star(deep+))return true;
MoveL_A(); MoveL_B();
if(IDA_star(deep+))return true;
MoveR_B(); MoveR_B();
if(IDA_star(deep+))return true;
MoveL_B(); MoveL_C();
if(IDA_star(deep+))return true;
MoveR_C(); MoveR_C();
if(IDA_star(deep+))return true;
MoveL_C(); MoveL_D();
if(IDA_star(deep+))return true;
MoveR_D(); MoveR_D();
if(IDA_star(deep+))return true;
MoveL_D();
return false;
} int main()
{
int n,t=;
while(~scanf("%s",str)){
if(strcmp(str,"")==)break;
n=str[]-'';
for(int j=,i=;i<=;j++,i++){
map[(i-)/+][j]=str[i]-'';
if(i%==)j=;
}
/*
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
printf("%d ",map[i][j]);
}
printf("\n");
}*/
if(Get_H()==){
printf("%d. 0\n",t++);
continue;
}
for(max_deep=;max_deep<=n;max_deep++){
if(IDA_star())break;
}
if(max_deep>n){
printf("%d. -1\n",t++);
}else
printf("%d. %d\n",t++,max_deep);
}
return ;
}

hdu 2918(IDA*)的更多相关文章

  1. hdu 2234(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...

  2. hdu 1667(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1667 思路:大牛说是IDA*的入门题=.=构造h()=8-max(1,2,3);  max(1,2,3 ...

  3. HDU - 1584 IDA*

    思路:裸的IDA*,估计当前状态至少需要多少距离才能达到目标状态,剪枝即可.每一墩牌只需记录其最上面和最下面的牌型即可完成移动. AC代码 #include <cstdio> #inclu ...

  4. HDU - 3567 IDA* + 曼哈顿距离 + 康托 [kuangbin带你飞]专题二

    这题难度颇大啊,TLE一天了,测试数据组数太多了.双向广度优先搜索不能得到字典序最小的,一直WA. 思路:利用IDA*算法,当前状态到达目标状态的可能最小步数就是曼哈顿距离,用于搜索中的剪枝.下次搜索 ...

  5. hdu 1813(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1813 思路:首先bfs预处理出‘0’到边界点最短距离,然后构造 h() 为所’0‘点逃离迷宫的最少步数 ...

  6. hdu 1560(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较 ...

  7. HDU 1560 IDA*搜索

    用N个串中找到最短的公共串(不要求连续,仅仅要相对位置一样就可以) 迭代加深搜索就可以 剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回. #include "stdio ...

  8. HDU 2485 Destroying the bus stations (IDA*+ BFS)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题意:给你n个点,m条相连的边,问你最少去掉几个点使从1到n最小路径>=k,其中不能去掉1, ...

  9. HDU 1813 Escape from Tetris (IDA*)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1813 题意:给你一个n*n的迷宫,其中0代表有一个人在这个位置,1代表墙,现在要求一个路线,使所有的人通 ...

随机推荐

  1. jedis使用线程池封装redis基本操作

    redisclient jedis 经常使用的 操作 key value hash list set zset 的基本操作 package cn.zto.util; import java.util. ...

  2. “cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'”错误的解决办法

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" ...

  3. [cocos2dx笔记010]用于UI的事件管理器

    cocos2dx有一个编辑器:cocostudio.眼下来说,已经是比較好用了.仅仅要载入导出的资源.就能够用上了.省去手动搭建面的麻烦. 可是.非常多须要事件的地方,操作比較麻烦,所以这里提供一个事 ...

  4. 【python下使用OpenCV实现计算机视觉读书笔记1】输入输出

    说明: 该部分内容为<OpenCV Computer Vision with Python>读书笔记. 1.读入文件与保存. import cv2 image=cv2.imread('a. ...

  5. 点滴积累【C#】---抓取页面中想要的数据

    效果: 描述:此功能是抓取外国的一个检测PM2.5的网站.实时读取网站的数据,然后保存到数据库里面.每隔一小时刷新一次. 地址为:http://beijing.usembassy-china.org. ...

  6. Python中使用UUID

    import uuid ... ... print uuid.uuid1() 生成的方法还有uuid2..n,具体参见官网LINK,包括参数细则

  7. Atitit.web预览播放视频的总结

    Atitit.web预览播放视频的总结 1. 浏览器类型的兼容性(chrome,ff,ie) 1 2. 操作系统的兼容性 1 3. 视频格式的内部视频格式跟播放器插件的兼容性.. 2 4. 指定播放器 ...

  8. 关于release后retainCount还是1的问题

    转自:http://www.cocoachina.com/bbs/read.php?tid=175523 realse之后再调用还能调用的的问题,我做了这么多年也是经常遇到,也曾经试图寻找原因, 就像 ...

  9. 用EA生成实体层代码

    在个人版机房重构中.实体层的代码敲得有点儿烦了.不同的实体仅仅是命名不同.代码结构全然一样.遇到反复的事情,就该动动脑.想想办法了. 以下给大家介绍使用EA生成实体层的代码. 首先.建一个类,注意选择 ...

  10. sed n/N使用说明

    sed的语法格式: sed [option] {sed-command} {input-file} sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-comm ...