hdu 2234(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2234
思路:IDA*可以搞,借鉴的是大牛的启发式函数h(): 可以考虑把每一行上的数转化成相同的,或者把每一列上的数字转化成相同的,二者取最小值。
1 1 3 2
2 4 4 2
3 3 1 4
1 2 3 4
如果把这个矩阵转化成行相同的话需要的操作:第一行 至少要2次,第二行也是2次, 第三行是2次,第四行是3次, 所以把矩阵转化成行相同至少要3次。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int map[][];
int maxdeep; bool Judge()
{
if(map[][]!=map[][]){
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(map[j][i]!=map[i][i])return false;
return true;
}else {
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(map[i][j]!=map[i][])return false;
return true;
}
} int Get_H()
{
int step1=,step2=;
for(int i=;i<=;i++){
int num[]={},ans=;
for(int j=;j<=;j++)num[map[i][j]]++;
for(int j=;j<=;j++)ans=max(ans,num[j]);
step1=max(step1,-ans);
}
for(int j=;j<=;j++){
int num[]={},ans=;
for(int i=;i<=;i++)num[map[i][j]]++;
for(int i=;i<=;i++)ans=max(ans,num[i]);
step2=max(step2,-ans);
}
return min(step1,step2);
} void Move_L(int i)
{
int tmp=map[i][];
for(int j=;j<=;j++)map[i][j-]=map[i][j];
map[i][]=tmp;
} void Move_R(int i)
{
int tmp=map[i][];
for(int j=;j>=;j--)map[i][j]=map[i][j-];
map[i][]=tmp;
} void Move_U(int j)
{
int tmp=map[][j];
for(int i=;i<=;i++)map[i-][j]=map[i][j];
map[][j]=tmp;
} void Move_D(int j)
{
int tmp=map[][j];
for(int i=;i>=;i--)map[i][j]=map[i-][j];
map[][j]=tmp;
} bool IDA_star(int deep)
{
if(deep==maxdeep)return Judge();
if(Get_H()+deep>maxdeep)return false; for(int i=;i<=;i++){
Move_L(i);
if(IDA_star(deep+))return true;
Move_R(i); Move_R(i);
if(IDA_star(deep+))return true;
Move_L(i);
}
for(int j=;j<=;j++){
Move_U(j);
if(IDA_star(deep+))return true;
Move_D(j); Move_D(j);
if(IDA_star(deep+))return true;
Move_U(j);
}
return false;
} int main()
{
int _case;
scanf("%d",&_case);
while(_case--){
for(int i=;i<=;i++)
for(int j=;j<=;j++)scanf("%d",&map[i][j]);
if(Judge()){
puts("");
continue;
}
maxdeep=;
while(maxdeep<=){
if(IDA_star())break;
maxdeep++;
}
if(maxdeep<=){
printf("%d\n",maxdeep);
}else
puts("-1");
}
return ;
}
hdu 2234(IDA*)的更多相关文章
- 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 2918(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2918 思路:这道题与前面几道类似,可以说是被秒杀了!!!构造启发式函数h()=(cnt+3)/4(cn ...
- 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代表墙,现在要求一个路线,使所有的人通 ...
随机推荐
- p2p网贷3种运营模式
迄今为止,接触了3套不同的P2P系统.当中一套是我參与开发的,另外两套是别的开发商提供的. P2P系统的核心实体:借款人.平台.理財人. 模式一: 借款人的线上账号由平台统一维护.借款人能够通 ...
- Apache 整合 Acitve Directory 達成 one single signon
原文地址:http://blog.hsdn.net/1266.html 我的公司使用AD進行使用者驗證,因此在使用者操作的便利性考量前提下.如何讓使用者不需要重覆輸入帳號與密碼,而直接抓取使用者已經登 ...
- Android高效异步图片加载框架
概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ...
- PHP-Windows下搭建Nginx+PHP环境
项目中光用Nginx了, 由于有运维人员, 很少搭建Nginx服务器, 开发也就用用Apache, 搭过几次Nginx也忘的快, 每次都去翻别人博客, 今天重搭特此记录, 装前最好了解下FastCGI ...
- Using AutoFac
第一次整理了下关于autofac的一些具体的用法 1. 安装 Autofac: Install-Package Autofac -Version 4.8.1 2. 创建两个类库项目,IService ...
- s:if 标签用法总结和举例
http://www.360doc.com/content/11/1108/18/6161903_162838014.shtml
- 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM 各公共网关接口介绍
CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...
- Java 枚举(enum) 的常见用法和开发规范
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static final ...
- Spring Cloud(四):熔断器Hystrix
熔断器 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务 ...
- Objective-C函数重载规则
是按照函数标签是否重复来判断是否为一个重载函数的.