bzoj1085骑士精神(搜索)

1085: [SCOI2005]骑士精神

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1893  Solved: 1051

Description

  在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑
士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空
位上。 给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步
数完成任务。

Input

  第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑
士,*表示空位。两组数据之间没有空行。

Output

  对于每组数据都输出一行。如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出-1。

Sample Input

2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100

Sample Output

7
-1
/*
迭代加深dfs经典题!
记录目标状态,然后从起始状态搜索。
爆搜可能超时,要加剪枝 
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define limit 15
using namespace std;
int T,ans=20,flag;
int xx[9]={0,-2,-2,-1,-1,1,1,2,2};
int yy[9]={0,-1,1,-2,2,2,-2,1,-1};
int s[10][7],get[10][10];
int target[10][10];
char si;void get_t()//记录目标状态 
{target[1][1]=1;target[1][2]=1;target[1][3]=1;target[1][4]=1;target[1][5]=1;target[2][1]=0;target[2][2]=1;target[2][3]=1;target[2][4]=1;target[2][5]=1;target[3][1]=0;target[3][2]=0;target[3][3]=2;target[3][4]=1;target[3][5]=1;target[4][1]=0;target[4][2]=0;target[4][3]=0;target[4][4]=0;target[4][5]=1;target[5][1]=0;target[5][2]=0;target[5][3]=0;target[5][4]=0;target[5][5]=0;
}int Judge()//计算当前状态与目标状态至少还有多少步 
{int ret=0;for(int i=1;i<=5;i++)for(int j=1;j<=5;j++){if(s[i][j]!=target[i][j])ret++;}return ret;
}void DFS(int now,int x,int y,int sum)
{if(flag) return;int c=Judge();if(now==sum){if(c==0)flag=1,ans=sum;}if(now-1+c>sum) return;//最优性剪枝:当前的步数+差异>限制步数 for(int i=1;i<=8;i++){int nx=x+xx[i];int ny=y+yy[i];if(nx>0&&nx<=5&&ny>0&&ny<=5){swap(s[x][y],s[nx][ny]);DFS(now+1,nx,ny,sum);swap(s[x][y],s[nx][ny]);}}
}int main()
{scanf("%d",&T);get_t();while(T--){int x,y;for(int i=1;i<=5;i++)for(int j=1;j<=5;j++){cin>>si;if(si=='*'){x=i;y=j;get[i][j]=2;}    else get[i][j]=si-'0';}for(int k=0;k<=limit;k++)//迭代加深限制步数 
        {flag=0;ans=20;for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)s[i][j]=get[i][j];DFS(0,x,y,k);if(ans==k) break;}if(ans<=15)printf("%d\n",ans);else printf("-1\n");}return 0;
} 
心若向阳,无谓悲伤

 

转载于:https://www.cnblogs.com/L-Memory/p/6159812.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国2项上榜:《时代周刊》2019年度100大最佳发明榜单发布!

来源&#xff1a;Time导读&#xff1a;《时代周刊》最新评选出2019年度100大最佳发明&#xff01;这100项突破性的发明改变了我们的生活、工作、娱乐和思考方式&#xff0c;它们让世界变得更美好&#xff0c;更智能&#xff0c;或更有趣。今天分享其中的20个极具未来感的产品。…

html异形轮播,异形滚动

异形滚动效果图.gif1、原理的揭示前言&#xff1a;图片大小处理问题的解决&#xff0c;当我们只改变盒子大小&#xff0c;图片会溢出&#xff0c;无法充满这个盒子。设置图片的宽高为 100%异形滚动.box {width: 100px;height: 100px;}img { //让图片充满整个盒子width: 100%;he…

python如何判断列表是否为空_Python中如何检查字符串/列表是否为空

本文最后更新于2018年5月5日&#xff0c;已超过 1 年没有更新&#xff0c;如果文章内容失效&#xff0c;还请反馈给我&#xff0c;谢谢&#xff01; Start 缘由&#xff1a; 整理、记录、备忘 正文&#xff1a; 参考解答&#xff1a; 从dict中取值时&#xff0c;一定要使用.get…

使用 jq 处理 json 文件的最佳实践

使用 jq 格式化 json 文本后再存入 json 文件&#xff0c;但不回显 json 内容 jq . << EOF > example.json [{"Classification": "hdfs-site","Properties": {"dfs.replication": "1"} }] EOF cat example.json使…

oracle19c 安装权限_Oracle19c 安装及SQL developer连接

因为偶然要用到Oracle数据库&#xff0c;而平常工作中用的都是mySQL的&#xff0c;所以电脑上安装的都是MySQL的相关服务&#xff0c;今天用到Oracle本地没有&#xff0c;所以自己安装了一个&#xff0c;但是因为不熟悉&#xff0c;安装遇到了很多的坑&#xff0c;因此记录一下…

【周末阅读】工业互联网的发展历程及实现路径

来源&#xff1a;青岛智能产业技术研究院【导读】目前&#xff0c;我国工业互联网发展迅猛&#xff0c;从国家层面、部委层面、地方层面都在积极推动&#xff0c;国际上对工业互联网发展也比较关注。我主要介绍工业互联网的三个方面内容&#xff1a;工业互联网的基本认识、国内…

三菱fx5u编程手册_FX5U系列PLC控制伺服3种方式

FX5U系列PLC为三菱目前最新的小型PLC&#xff0c;机身小巧却功能强大&#xff0c;不仅保留了三菱小型PLC已有的优点&#xff0c;还吸收了大型PLC的开发理念&#xff0c;在整体性能上得到了很大的提高。本文以FX5U在控制伺服的性能上做个总结&#xff0c;归纳下FX5U控制伺服的3种…

[转人工智能工程师学习路线及具备的5项基本技能

原文地址&#xff1a;http://blog.csdn.net/BaiHuaXiu123/article/details/52478853 摘要 学习路线 你是否对机器学习充满兴趣呢?其实到目前为止&#xff0c;每天有越来越多的工程师开始将好奇的目光转向机器学习领域。实际上&#xff0c;你会发现现在没有哪一个领域比机器学习…

mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形

Used by Text, Image, and RawImage for example to generate vertices specific to their use case.说的是当该控件(例如Text,Image,RawImage)需要改变顶点的时候&#xff0c;就会自动调用。在传入的vh参数里修改顶点&#xff0c;三角形&#xff0c;UV等&#xff0c;同样可以达…

python牛顿迭代公式_python计算牛顿迭代多项式实例分析

本文实例讲述了python计算牛顿迭代多项式的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;p evalPoly(a,xData,x). Evaluates Newtons polynomial p at x. The coefficient vector a can be computed by the function coeffts. a coeffts(xData,yData). Computes…

“机器人迟钝一点,会更有人情味”,迪士尼提出新型人机交互系统

来源&#xff1a;机器人大讲堂导读打篮球时&#xff0c;当球向你飞来&#xff0c;你总会下意识地或者说有意识地伸手去接住球。生活中&#xff0c;有人递给你一个东西时&#xff0c;你也会伸手去接住&#xff0c;礼貌或者仓促地。那么在如今拟人机器人越发“聪明”的时代&#…

黑龙江对口学计算机上机,2009年黑龙江省职高对口升学计算机应用专业技能试卷十.doc...

2009年黑龙江省职高对口升学计算机应用专业技能试卷十2009年黑龙江省职高对口升学计算机应用专业技能试卷十总分题号一二三四五核分人题分(本试卷满分150分&#xff0c;考试时间120分钟)一&#xff0e;填空题&#xff1a;(每空1分&#xff0c;共50分)1、Windows Xp中窗口排列方…

Linux 应用程序 网络通讯函数记录

创建一个套接口&#xff08;&#xff09;。#include <sys/socket.h>int socket( int af, int type, int protocol);af&#xff1a;一个地址描述。目前仅支持AF_INET格式&#xff0c;也就是说ARPA Internet地址格式。type&#xff1a;指定socket类型。新套接口的类型描述类…

台式计算机固定资产属于哪类,电脑属于固定资产的哪一类

台式计算机属于固定资产分类中的电子设备范畴。固定资产是指企业为生产产品、提供劳务、出租或者经营管理而持有的超过12个月并达到一定价值标准的非货币性资产&#xff0c;包括房屋、建筑物、机器、机械、交通工具和其他设备&#xff0c;与生产经营活动有关的器具、工具。固定…

华为十大发明

来源&#xff1a;蓝海长青智库时代的车轮滚滚向前&#xff0c;推动时代前进的离不开那些改变人们生活的发明。就像爱迪生发明电灯&#xff0c;每一个时代都有一些创新的技术足以载入史册。这些技术或许在发明初期还不足以让人感受到它的价值&#xff0c;但是随着时代的进步&…

python利用自动识别写模块_教你用Python 实现自动导入缺失的库

在写 Python 项目的时候&#xff0c;我们可能经常会遇到导入模块失败的错误&#xff1a;ImportError: No module named ‘xxx’ 或者 ModuleNotFoundError: No module named ‘xxx’ 。 导入失败问题&#xff0c;通常分为两种&#xff1a;一种是导入自己写的模块&#xff08;即…

基于类的命令行notebook的实现

在看一本书《PYTHON3 面向对象编程》 内容丰富&#xff0c;作作记录。 notebook.py __author__ chengang882import datetime# Store the next available id for all new note last_id 0class Note(object):"""Represent a note in the notebook. Match agains…

python中用socket检测端口_python基于socket函数实现端口扫描

本文实例为大家分享了python基于socket实现端口扫描的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下自学Python一段时间&#xff0c;写个端口扫描器练练手。有什么不足之处&#xff0c;请见谅这是基于socket函数对端口进行端口扫描所以&#xff0c;首先要导入socket…

php清理html table样式,Parse HTML Table - PHP [closed]

问题Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.Want to improve this question? Update the question so its on-topic for Stack Overflow.Closed 6 years ago.I have an HTML table that I would like to par…