题目链接: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*)的更多相关文章

  1. hdu 1667(IDA*)

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

  2. HDU - 1584 IDA*

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

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

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

  4. hdu 2918(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2918 思路:这道题与前面几道类似,可以说是被秒杀了!!!构造启发式函数h()=(cnt+3)/4(cn ...

  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. Ldap登陆AD(Active Directory)进行认证的Java示例

    原文地址:http://hi.baidu.com/js2007/item/24efbb0fae1c9b90a3df432a package LdapTest; import java.util.Has ...

  2. Okhttp实用封装

    概述 对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码 详细 代码下载:http://www.demodashi.com/demo/11101.html 在自 ...

  3. jquery导航,按钮等特效 - apycom

    http://apycom.com/

  4. 总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作

    http://hi.baidu.com/yashua839/blog/item/131fdb2fe547ef221f3089af.html一.Iframe 篇 //&&&&am ...

  5. AESDK从流中获得变换信息

    AE中Transform下的信息位于流中,和别的软件不太一样. 如果是特效的参数信息要从EffectSuites中获取,默认的参数信息基本上StreamSuites都可以得到 需要注意,取得流之后也要 ...

  6. atitit.软件开发概念--过滤和投影 数据操作

    atitit.软件开发概念--过滤和投影 数据操作 投影的本质及扩展 物体在太阳光的照射下形成的影子(简称日影)就是平行投影.日影的方向可以反映时间 投影还比喻此物通过彼物表现出来的迹象. 作者::老 ...

  7. 单页应用SPA做SEO的一种清奇的方案

    单页应用SPA做SEO的一种清奇的方案 网上有好几种单页应用转seo的方案,有服务端渲染ssr.有预渲染prerender.google抓AJAX.静态化...这些方案都各有优劣,开发者可以根据不同的 ...

  8. iconv 解决乱码问题

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

  9. CSplashScene类

    #ifndef __TRANSITIONSCENE_H__ #define __TRANSITIONSCENE_H__ #include "GameFrameHead.h" cla ...

  10. C++之在类内部访问对象的私有成员

    一.引言 今天看项目里的一段代码发现,竟然可以再类的成员函数中访问该类的对象的私有成员.感觉不可思议. 自己写的实例代码: #include <iostream> using namesp ...