洛谷 P2324 [SCOI2005]骑士精神
题目描述

输入输出格式
输入格式:
第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位。两组数据之间没有空行。
输出格式:
对于每组数据都输出一行。如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出-1。
输入输出样例
2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100
7
-1
说明

迭代加深搜索+最优性剪枝
#include <iostream>
#include <cstdio>
using namespace std;
int goal[][]={{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,}};
int T,ans,qp[][],q[][],fx[]={,,-,-,,,-,-},fy[]={,-,,-,,-,,-};
bool flag;
int judge()
{
int ret=;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
if(qp[i][j]!=goal[i][j]) ret++;
return ret;
}
void dfs(int now,int x,int y,int Limit)
{
if(now>Limit||flag) return;
int cy=judge();
if(now==Limit) if(cy==) {ans=Limit;flag=;return;}
if(now+cy->Limit) return;//最优性剪枝 目前+差异>限制
for(int i=;i<;++i)
{
int tx=x+fx[i],ty=y+fy[i];
if(tx>=&&tx<=&&ty>=&&ty<=)
{
swap(qp[x][y],qp[tx][ty]);
dfs(now+,tx,ty,Limit);
swap(qp[x][y],qp[tx][ty]);
}
}
}
int main()
{
scanf("%d",&T);
for(int x,y;T--;)
{
ans=;flag=false;
for(int i=;i<=;++i)
{
char p;
for(int j=;j<=;++j)
{
cin>>p;
if(p=='*') q[i][j]=,x=i,y=j;
else q[i][j]=p-'';
}
}
for(int i=;i<=;++i)
{
for(int j=;j<=;++j)
for(int k=;k<=;++k)
qp[j][k]=q[j][k];
dfs(,x,y,i);
if(ans==i) break;
}
if(ans<=) printf("%d\n",ans);
else printf("-1\n");
}
return ;
}
洛谷 P2324 [SCOI2005]骑士精神的更多相关文章
- 洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- 洛谷P2324 [SCOI2005] 骑士精神
题目 方法很多,最经典的是用搜索的算法,也就是\(IDA*\)算法搜索. \(IDA*\)算法是每次规定一个搜索深度,并在搜索的时候限制该搜索深度,从而达到把深搜的优点和广搜的优点结合起来优化时间的一 ...
- [luogu P2324] [SCOI2005]骑士精神
[luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...
- P2324 [SCOI2005]骑士精神(A*)
P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...
- 【题解】P2324 [SCOI2005]骑士精神
·有关IDA* 是带有估值函数的迭代加深搜索,表现出出色的效率. 估值函数可以简单的定义为「已经到位的骑士的个数」. 然后就是普通的迭代加深了. 算法酷炫不一定赢,搜索好才是成功. ——Loli Co ...
- 【luogu P2324 [SCOI2005]骑士精神】 题解
题目链接:https://www.luogu.org/problemnew/show/P2324 不懂怎么剪枝,所以说,,我需要氧气.. 第一道A* // luogu-judger-enable-o2 ...
- Luogo P2324 [SCOI2005]骑士精神
所有想练习A*的人都先来敲一下这道题吧. 数据范围即便只有5*5,但朴素的爆搜还是会超时. 因此考虑剪枝. 对于这道题,肯定只要进行最优化剪枝,判断现在走的步数+剩下最少要走的步数,如果大于ans或者 ...
- P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
- Luogu P2324 [SCOI2005]骑士精神 搜索
刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...
随机推荐
- JAVA学习笔记——(二)
今日内容介绍 1.变量 2.运算符 01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:你家里的大衣柜是容器 ...
- 怎么判断DropDownList是否选择值
判断其 SelectedIndex 属性值 >0.
- Pure CSS 的网格布局(比bootstrap小很多且易扩展的css UI)
(转自百度经验)http://jingyan.baidu.com/article/48a42057c44fdba9242504dd.html Pure是一个简单.实用的CSS框架,鉴于目前网上对pur ...
- 自定义Swap
网上看到的一篇文章加深了对指针的了解,收藏一下 自定义的swap函数是一个老掉牙的问题,而这个问题对于理解指针和内存中的栈是很有帮助的 一般自定swap函数是这样的: 1.swap函数的功能是实现两个 ...
- springboot 启动
1. 新建一个java 类,名为Application,代码内容: @ServletComponentScan@SpringBootApplicationpublic class Applicatio ...
- java基础第七篇之接口
1.什么是接口: * 接口是方法的集合,而且接口中的方法全是抽象的 * 你可以把接口看成一个特殊的"抽象类",接口中的方法全是抽象的 * * * 2.java中怎么定义接口: * ...
- 搞定C系语言的的swap
http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html 原地址 Parameters, by value and by reference: Both ...
- K.河北美食
链接:https://ac.nowcoder.com/acm/contest/903/K 题意: icebound最喜欢吃河北菜,于是他想要大厨做一桌河北菜宴请宾客.icebound购买了一些食材,并 ...
- loj#6169. 相似序列 hash+主席树
因为他的相似是在排完序下的 那我就在排序的情况下hash啊 这怎么hash啊 主席树啊! 没了 #include <bits/stdc++.h> #define MAXNODE 50000 ...
- js中 前台日期时间使用方法总结
(1)JQuery EasyUI 1.4.2 版本中的 DateTimeBox(时间日期输入框) 参考本地帮助文档. (2)jquery.datetimepicker 单独使用的包 只 ...