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代表墙,现在要求一个路线,使所有的人通 ...
随机推荐
- iOS开发- 隐藏键盘总结
一.隐藏自身软键盘 当对于有多个UITextField控件都想通过点击"Return"来隐藏自身软键盘的情况.这时的最好办法是使用Did End on Exit事件.在点击软键盘右 ...
- 【php写日志】php将日志写入文件
php 写内容到文件,把日志写到log文件 <?php header("Content-type: text/html; charset=utf-8"); /******** ...
- Maven构建项目时index.jsp文件报错
错误为:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 原 ...
- 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- 摘:SQL Server数据类型的25种
我们大家都知道数据类弄是数据的一种基本属性,其主要是表示数据在实际操作中所表示信息的类型.任何一种计算机语言都定义了自己的数据类型. 当然,不同的程序语言都具有不同的特点,所定义的SQL Server ...
- quartus ii工程文件的分析
.pof:通过AS口将程序固化到EPCS(flash)内. .sof:通过JTAG口下载到FPGA内部的SRAM里面. .JIC:通过JTAG口将程序固化到EPCS(flash)内.
- Windows服务操作之sc和net命令及windows任务计划
看个粟子: 1.“新建项目”——“Window服务” 生成的目录结构 双击“MainService.cs”,右键点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组 ...
- centos vsftp 500 OOPS: cannot change directory
CentO中把vsftpd安裝配置好了,以為大功告成,但用FTP 登入出現下錯誤:500 OOPS: cannot change directoryCentOS系統安裝了SELinux,因為預設下是沒 ...
- 百度地图 驾车/公交查询Demo(支持多起点多终点)
效果图: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...