洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神
题目描述
输入输出格式
输入格式:
第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位。两组数据之间没有空行。
输出格式:
对于每组数据都输出一行。如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出-1。
一看到15,莫名的想到迭代加深。
然后发现这个玩意12都跑不过去。想过估价函数,但感觉操作次数会很多就放弃了。
实际上这个题的重点就是估价函数
设估价函数为与目标状态不同的点的个数+1(这个+1是为了最后一步空白的)
然后跑IDA* 就行了(事实是A*更快)
Code:
#include <cstdio>
const int N=6;
int t,sta[N][N],step,ex,ey,flag;
int to[N][N]=
{
{0,0,0,0,0,0},
{0,1,1,1,1,1},
{0,-1,1,1,1,1},
{0,-1,-1,0,1,1},
{0,-1,-1,-1,-1,1},
{0,-1,-1,-1,-1,-1},
};
inline int estimate()
{int res=0;for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)if(to[i][j]!=sta[i][j])res++;return res;
}
int dx[9]={0,-2,-1,1,2,2,1,-1,-2};
int dy[9]={0,1,2,2,1,-1,-2,-2,-1};
inline void Swap(int &x,int &y)
{int tmp=x;x=y;y=tmp;
}
void dfs(int dep,int x,int y)
{if(flag) return;if(estimate()+dep>step+1) return;if(step==dep){flag=1;return;}for(int i=1;!flag&&i<=8;i++){int X=x+dx[i],Y=y+dy[i];if(X>0&&Y>0&&X<=5&&Y<=5){Swap(sta[x][y],sta[X][Y]);dfs(dep+1,X,Y);Swap(sta[x][y],sta[X][Y]);}}
}
void work()
{flag=0;if(estimate()==0) {printf("0\n");return;}for(step=1;step<=15;step++){dfs(0,ex,ey);if(flag){printf("%d\n",step);return;}}printf("-1\n");
}
int main()
{scanf("%d",&t);while(t--){for(int i=1;i<=5;i++){scanf("\n");for(int j=1;j<=5;j++){char c;scanf("%c",&c);if(c=='*') ex=i,ey=j,sta[i][j]=0;else if(c=='1') sta[i][j]=1;else sta[i][j]=-1;}}work();}return 0;
}
2018.8.2
转载于:https://www.cnblogs.com/butterflydew/p/9409489.html
洛谷 P2324 [SCOI2005]骑士精神 解题报告相关推荐
- 洛谷 P2324 [SCOI2005]骑士精神
目录 题目 思路 $Code$ 题目 戳 思路 $dfs$. $Code$ #include<iostream> #include<cstdio> #include<cs ...
- 【洛谷】P4147 玉蟾宫 解题报告
[洛谷]P4147 玉蟾宫 解题报告 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...
- 【题解】P2324[SCOI2005] 骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位. 在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为 ...
- P2324 [SCOI2005]骑士精神(IDA*)
思路:不是动骑士,而是动空格.只能动15次,证明搜索树的高的确定的,考虑IDA解决 IDA能很好地解决一些搜索中有上界的情况 大概就是搞一个估值函数,然后当前情况+估价函数>限制的情况直接剪掉这 ...
- 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告
P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...
- 「洛谷P1343」地震逃生 解题报告
P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...
- 洛谷 P4284 [SHOI2014]概率充电器 解题报告
P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- 洛谷 [SDOI2015]约数个数和 解题报告
[SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...
- 洛谷 CF1043F Make It One 解题报告
CF1043F Make It One 题意 从一堆数中选择最少的数,使它们的\(\gcd=1\) 输入输出格式 输入格式 第一行:一个正整数\(n\). 第二行:\(n\)个正整数,给出了这个数列. ...
最新文章
- 翻转二叉树 c语言实现 递归 栈 队列
- restapi如何传图片_iPhone传照片,不是只能用微信QQ,第二种方法很少人知道哦
- Forefront_TMG_2010-TMG建立Remote ***
- BZOJ4196: [Noi2015]软件包管理器 (好题
- python 如何理解SVM(支持向量机)? 还有SVC.decision_function( )功能
- golang 请求带验证信息的坑
- flow 静态类型检查 js
- python程序开发总结_python开发总结
- 初学C遇到的一些知识点汇总
- python面相对象编程超市系统_python面向对象编程: 面向对象版学员管理系统
- STM8单片机读取18B20温度传感器
- centos YUM的升级点
- 浪潮n系列服务器指示灯_中国服务器市场,浪潮跑出,联想和华为出现衰退
- python如何选择两种不同输入方式_从Python到空间分析arcpy || 第一回:关于连载的总介绍...
- 取色工具和RGB网页颜色在线取色器
- 安卓手机怎么投屏台式计算机,怎么将手机投屏到台式电脑上
- ArcBlock 问答 | 扎实打造影响整个区块链生态的产品
- 作为一个程序员对特修斯之船的理解
- 成君忆不幸被彭剑锋言中
- 语音信号处理:librosa库【详解】