hdu 2918(IDA*)
题目链接: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*)的更多相关文章
- hdu 2234(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234 思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者 ...
- hdu 1667(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1667 思路:大牛说是IDA*的入门题=.=构造h()=8-max(1,2,3); max(1,2,3 ...
- HDU - 1584 IDA*
思路:裸的IDA*,估计当前状态至少需要多少距离才能达到目标状态,剪枝即可.每一墩牌只需记录其最上面和最下面的牌型即可完成移动. AC代码 #include <cstdio> #inclu ...
- HDU - 3567 IDA* + 曼哈顿距离 + 康托 [kuangbin带你飞]专题二
这题难度颇大啊,TLE一天了,测试数据组数太多了.双向广度优先搜索不能得到字典序最小的,一直WA. 思路:利用IDA*算法,当前状态到达目标状态的可能最小步数就是曼哈顿距离,用于搜索中的剪枝.下次搜索 ...
- hdu 1813(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1813 思路:首先bfs预处理出‘0’到边界点最短距离,然后构造 h() 为所’0‘点逃离迷宫的最少步数 ...
- hdu 1560(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较 ...
- HDU 1560 IDA*搜索
用N个串中找到最短的公共串(不要求连续,仅仅要相对位置一样就可以) 迭代加深搜索就可以 剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回. #include "stdio ...
- HDU 2485 Destroying the bus stations (IDA*+ BFS)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2485 题意:给你n个点,m条相连的边,问你最少去掉几个点使从1到n最小路径>=k,其中不能去掉1, ...
- HDU 1813 Escape from Tetris (IDA*)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1813 题意:给你一个n*n的迷宫,其中0代表有一个人在这个位置,1代表墙,现在要求一个路线,使所有的人通 ...
随机推荐
- java FileI(O)nputStream为什么比BufferedI(O)utputStream慢?
因为buffered多了一个缓冲区,读和写都是先把硬盘或者内存中的数据放到内存中一块缓存区域,到一定大小读写到硬盘或者内存 package io; import java.io.*; public ...
- 【微信小程序】request请求POST提交数据,记得要加上header
wx.request({ url: '*******', data: { "type":"nearest_village", "district&qu ...
- mysql 如何查看sql语句执行时间
查看执行时间 1 show profiles; 2 show variables;查看profiling 是否是on状态: 3 如果是off,则 set profiling = 1: 4 执行自己的s ...
- PHP-汇总CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI
什么是CGI 1.CGI是HTTP协议与其他外部应用程序之间的一个接口标准 2.CGI程序或脚本(CGI程序通过HTTP服务器去执行时, 必须在CGI程序中制定其执行程序的完整路径, 使SHELL能找 ...
- 在Quartus中如何使用TCL脚本文件配制管脚
quartus软件分配管脚的方法有两种,一是选择菜单“assignments->pins”进入管脚分配视图手动分配:第二种方法是利用tcl脚本文件自动分配.这里我来介绍第二种方法. 1.生成tc ...
- tp数据库操作
1.常见的数据库操作//插入记录// $insert=Db::execute("insert into tp_user (username,password) values ('dome', ...
- java运算符优先级和结合性
运算符 结合性 [ ] . ( ) (方法调用) 从左向右 ! ~ ++ -- +(一元运算) -(一元运算) 从右向左 * / % 从左向右 + - 从左向右 << >> & ...
- Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7
Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception processVob7 1. 1. javascript异常处理机制 ...
- C++之虚析构函数
代码一. #include <iostream> using namespace std; class Base { public: Base(){}; ~Base() { cout &l ...
- 一款jquery和css3实现的卡通人物动画特效
之前为大家分享了很多jquery和css3的动画实例.今天给大家带来一款非常炫的jquery和css3实现的卡通人物动画特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: < ...