题目链接: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. 摘:"error LNK2019: 无法解析的外部符号 该符号在函数 中被引用" 错误原因

    例如“error LNK2019: 无法解析的外部符号error LNK2001: 无法解析的外部符号“private: static struct _OVERLAPPED CUsbCom::g_Wr ...

  2. 转 Android开发学习笔记:浅谈WebView

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

  3. LOSF海量小文件问题解决思路及开源库

    "+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"一.问题产生原因以 ...

  4. 解决C# WINFORM程序只允许运行一个实例的几种方法详解

    要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现: 方法一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例. 把program.cs文件里的Main()函数改为如下代码: u ...

  5. WIN10 无法访问2003 server共享

    With Windows 10 v1803 or Spring Creators update released I have decided to do a fresh installation o ...

  6. numpy和matplotlib绘制直方图

    使用 Matplotlib Matplotlib 中有直方图绘制函数:matplotlib.pyplot.hist()它可以直接统计并绘制直方图.你应该使用函数 calcHist() 或 np.his ...

  7. hdoj4864 Task (贪心)

    题目来源: 2014 Multi-University Training Contest 1--by FZU 题意:有N个机器和m个工作.机器和工作都有一个时间xi和价值yi,一个工作仅仅有满足xi和 ...

  8. Openresty支持HTTP2

    1. 下载openresty-1.13.6.1.tar.gz和openssl-1.0.2l.tar.gz,并解压 下载对应的软件版本,创建openresty_http2安装路径 2. 安装openre ...

  9. InnoDB存储引擎表的逻辑存储结构

    1.索引组织表:     在InnoDB存储引擎中,表都是依照主键顺序组织存放的.这样的存储方式的表称为索引组织表,在innodb存储引擎表中,每张表都有主键.假设创建的时候没有显式定义主键,则Inn ...

  10. iconv 解决乱码问题

    [root@NGINX-APACHE-SVN pro]# file 林.txt 林.txt: ISO-8859 text, with no line terminators #在LINUX下显示乱码 ...