·有关IDA*

是带有估值函数的迭代加深搜索,表现出出色的效率。

估值函数可以简单的定义为「已经到位的骑士的个数」

然后就是普通的迭代加深了。


算法酷炫不一定赢,搜索好才是成功。

——Loli


Code:

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <fstream>
#define re register
#define GC getchar()
#define Clean(X,K) memset(X,K,sizeof(X))
#define Jud(X,Y) (X<0||X>=N||Y<0||Y>=N)
using namespace std ;
int Qread () {
int X = ;
char C = GC ;
while (C > '' || C < '') C = GC ;
while (C >='' && C <='') {
X = X * + C - '' ;
C = GC ;
}
return X ;
}
const int Dx[] = {,,-,-,,,-,-},Dy[] = {,-,,-,,-,,-},N = , Aim[N + ][N + ] = {
{,,,,,-},
{,,,,,-},
{,,,,,-},
{,,,,,-},
{,,,,,-},
{-,-,-,-,-,-}
};
int A[N + ][N + ] , Sx , Sy ;
int G () {
int Ans = ;
for (re int i = ; i < N; ++ i) for (re int j = ; j < N; ++ j) if (A[i][j] != Aim[i][j]) ++ Ans ;
return Ans ;
}
int Ans , Fl = ;
void DFS (int X , int Y , int Stp) {
int Star = G() ;
if (Stp + Star > Ans + ) return ;
if (Fl) return ;
if (Star == ) {
Fl = ;
return ;
}
for (re int i = ; i < ;++ i) {
int Tx = Dx[i] + X , Ty = Dy[i] + Y ;
if (Jud(Tx , Ty)) continue ;
swap(A[X][Y] , A[Tx][Ty]) ;
DFS (Tx , Ty , Stp + ) ;
swap (A[X][Y] , A[Tx][Ty]) ;
}
}
int main () {
// freopen ("P2324.in" , "r" , stdin) ;
int Times = Qread () ;
while (Times -- ) {
for (re int i = ; i < N; ++ i) {
for (re int j = ; j < N; ++ j) {
char C = GC ;
while (C != '*' && C != '' && C != '') C = GC ;
if (C == '') A[i][j] = ;
if (C == '') A[i][j] = ;
if (C == '*') {
A[i][j] = ;
Sx = i , Sy = j ;
}
}
}
Fl = ;
for (Ans = ; Ans <= ; ++ Ans) {
DFS (Sx , Sy , ) ;
if (Fl) {
cout << Ans <<endl;
break ;
}
}
if (!Fl)cout << - <<endl;
}
fclose (stdin) , fclose (stdout) ;
return ;
}

Thanks!

【题解】P2324 [SCOI2005]骑士精神的更多相关文章

  1. [luogu P2324] [SCOI2005]骑士精神

    [luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...

  2. 洛谷 P2324 [SCOI2005]骑士精神 解题报告

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  3. P2324 [SCOI2005]骑士精神(A*)

    P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...

  4. 【luogu P2324 [SCOI2005]骑士精神】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2324 不懂怎么剪枝,所以说,,我需要氧气.. 第一道A* // luogu-judger-enable-o2 ...

  5. Luogo P2324 [SCOI2005]骑士精神

    所有想练习A*的人都先来敲一下这道题吧. 数据范围即便只有5*5,但朴素的爆搜还是会超时. 因此考虑剪枝. 对于这道题,肯定只要进行最优化剪枝,判断现在走的步数+剩下最少要走的步数,如果大于ans或者 ...

  6. P2324 [SCOI2005]骑士精神

    题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...

  7. 洛谷 P2324 [SCOI2005]骑士精神

    题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...

  8. 洛谷P2324 [SCOI2005] 骑士精神

    题目 方法很多,最经典的是用搜索的算法,也就是\(IDA*\)算法搜索. \(IDA*\)算法是每次规定一个搜索深度,并在搜索的时候限制该搜索深度,从而达到把深搜的优点和广搜的优点结合起来优化时间的一 ...

  9. Luogu P2324 [SCOI2005]骑士精神 搜索

    刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...

随机推荐

  1. Chapter 4 Invitations——28

    "Oh, thanks, now that's all cleared up." Heavy sarcasm. “哦,真感谢,现在一切都清楚了.” 我很讽刺的说道 I realiz ...

  2. 用gogs轻松搭建个人的git服务器

    因为公司和家里电脑里面有些项目需做版本控制或者说共享吧,就想搭个自己的git服务器:原本想用gitlab,不过我服务器配置比较差,查了一下,看到gogs,眼前一亮: Gogs 的目标是打造一个最简单. ...

  3. 创建简单WEB高可用集群

    1. 环境介绍 我这里弄了2个虚拟机,信息如下: node1:192.168.168.201 node2:192.168.168.202 2.配置主机名 [root@node1 ~]# vim /et ...

  4. [日常] 解决mysql不允许外部访问

    1.在端口已经开放的情况下,ubuntu mysql 3306允许远程访问vim /etc/mysql/mysql.conf.d/mysqld.cnf注释#bind-address = 127.0.0 ...

  5. Mysql is null 索引

    看到很多网上谈优化mysql的文章,发现很多在谈到mysql的null是不走索引的,在此我觉得很有必要纠正下这类结论.mysql is null是有索引的,而且是很高效的,(版本:mysql5.5)表 ...

  6. ASP.NET SignalR介绍

    是什么? 简单来说,ASP.NET SignalR是一个开源的实时通讯(real-time)库,有了ASP.NET SignalR,我们可以在 详细介绍参考:https://docs.microsof ...

  7. 前端入门10-JavaScript语法之对象

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  8. shell条件判断if中的-a到-z的意思

    [ -a FILE ]  如果 FILE 存在则为真.  [ -b FILE ]  如果 FILE 存在且是一个块特殊文件则为真.  [ -c FILE ]  如果 FILE 存在且是一个字特殊文件则 ...

  9. 通过Excel文件快速创建页面和数据表

    在设计一个软件系统,构建过程:需求->数据表->系统开发.实际情况是需求(数据)很多来源于已经存在的文件中,客户会要求把这些数据“电子化”,这就给需求分析产生了很大的工作量: 分析这些原始 ...

  10. onScrollChanged()

    转载请标明出处:http://www.cnblogs.com/tangZH/p/8428100.html  onScrollChanged里面有四个参数 @Overrideprotected void ...