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]骑士精神 解题报告相关推荐

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

    目录 题目 思路 $Code$ 题目 戳 思路 $dfs$. $Code$ #include<iostream> #include<cstdio> #include<cs ...

  2. 【洛谷】P4147 玉蟾宫 解题报告

    [洛谷]P4147 玉蟾宫 解题报告 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N* ...

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

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位. 在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为 ...

  4. P2324 [SCOI2005]骑士精神(IDA*)

    思路:不是动骑士,而是动空格.只能动15次,证明搜索树的高的确定的,考虑IDA解决 IDA能很好地解决一些搜索中有上界的情况 大概就是搞一个估值函数,然后当前情况+估价函数>限制的情况直接剪掉这 ...

  5. 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告

    P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...

  6. 「洛谷P1343」地震逃生 解题报告

    P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...

  7. 洛谷 P4284 [SHOI2014]概率充电器 解题报告

    P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. 洛谷 [SDOI2015]约数个数和 解题报告

    [SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...

  9. 洛谷 CF1043F Make It One 解题报告

    CF1043F Make It One 题意 从一堆数中选择最少的数,使它们的\(\gcd=1\) 输入输出格式 输入格式 第一行:一个正整数\(n\). 第二行:\(n\)个正整数,给出了这个数列. ...

最新文章

  1. 翻转二叉树 c语言实现 递归 栈 队列
  2. restapi如何传图片_iPhone传照片,不是只能用微信QQ,第二种方法很少人知道哦
  3. Forefront_TMG_2010-TMG建立Remote ***
  4. BZOJ4196: [Noi2015]软件包管理器 (好题
  5. python 如何理解SVM(支持向量机)? 还有SVC.decision_function( )功能
  6. golang 请求带验证信息的坑
  7. flow 静态类型检查 js
  8. python程序开发总结_python开发总结
  9. 初学C遇到的一些知识点汇总
  10. python面相对象编程超市系统_python面向对象编程: 面向对象版学员管理系统
  11. STM8单片机读取18B20温度传感器
  12. centos YUM的升级点
  13. 浪潮n系列服务器指示灯_中国服务器市场,浪潮跑出,联想和华为出现衰退
  14. python如何选择两种不同输入方式_从Python到空间分析arcpy || 第一回:关于连载的总介绍...
  15. 取色工具和RGB网页颜色在线取色器
  16. 安卓手机怎么投屏台式计算机,怎么将手机投屏到台式电脑上
  17. ArcBlock 问答 | 扎实打造影响整个区块链生态的产品
  18. 作为一个程序员对特修斯之船的理解
  19. 成君忆不幸被彭剑锋言中
  20. 语音信号处理:librosa库【详解】

热门文章

  1. flink sql planner到底是干嘛用的
  2. Kaggle竞赛方案分享:如何分辨杂草和植物幼苗(转)
  3. Saleor ran into an unexpected problem
  4. kaggle用命令提交
  5. 正则表达式中?的用法
  6. Ubuntu 16.04工具栏靠下设置
  7. 稀疏表达:向量、矩阵与张量(中)
  8. RESTful---SpringMVC学习笔记(十三)
  9. 设置eclipse中的编辑区的背景颜色、注释文字的颜色、修改注释内作者名和时间
  10. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】