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…

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

来源&#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;你会发现现在没有哪一个领域比机器学习…

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;礼貌或者仓促地。那么在如今拟人机器人越发“聪明”的时代&#…

华为十大发明

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

基于类的命令行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…

2020年五大云计算预测

来源&#xff1a;信息安全与通信保密杂志社Forrester的新报告发现&#xff0c;超大规模云联盟、云原生创新和新的云安全要求将在2020年重塑云计算行业格局。Forrester近日发布了一份报告&#xff0c;对2020年的云计算行业发布了五大预测。这些预测表明争夺云计算霸主地位的竞争…

薛建儒:无人车的场景理解与自主运动

来源&#xff1a;人工智能前沿讲习一报告导读本文为西安交通大学人工智能与机器人研究所薛建儒教授&#xff0c;做的题为无人车场景计算与自主运动的研究进展的报告&#xff0c;主要从无人车概述、场景理解、自主运动、总结与展望四个方面介绍了其团队在无人驾驶领域的探索。在…

(转)HTTP 长连接和短连接

1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议&#xff0c;在传输层使用TCP协议&#xff0c;在网络层使用IP协议。IP协议主要解决网络路由和寻址问题&#xff0c;TCP协议主要解决如何在IP层之上可靠的传递数据包&#xff…

中美科技成果转化比较分析

来源&#xff1a;创新研究近年来随着国家在不断加大科技投入&#xff0c;以及专利成果数量的快速增长&#xff0c;全社会对科技创新关注程度不断提高&#xff0c;对我国科技成果转化率低的批评不断增加&#xff0c;有文章指出“我国科技成果的转化率仅有10%&#xff0c;比美国8…

商用计算机低温工作,突破量子计算机瓶颈!超低温芯片能在接近绝对零度的温度下工作...

如何克服量子计算机运转时产生的超高热量仍是量子计算机研究当中的一大难题。日前&#xff0c;科学家开发出一种新型的低温计算机芯片&#xff0c;能够在接近绝对零度的理论温度极限下工作。这种名为 Gooseberry 的低温系统为量子计算领域的革命奠定了基础——使新一代机器能够…

python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...

Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具&#xff0c;他的前身是Selenium 。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。但是目前使用Selenium2做测试的基本是采用ja…

虚拟机安装CentOS6.4

1 概述 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统&#xff0c;运行在主机上&#xff0c;完全独立&#xff0c;虚拟机里面的所有操作不会影响主机&#xff0c;即使虚拟机崩溃了&#x…

中国人工智能产业白皮书

来源&#xff1a;北京物联网智能技术应用协会未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1…

python基础笔记_python基础学习笔记

一、Python四种类型的数据格式 整数----2、3、 长整数&#xff1a;指的是比较大一点的整数 浮点数----3.23、52.3EE:标记表示10的幂。 复数----&#xff08;-54J)、&#xff08;2.3-4.6J&#xff09; 二、Python字符串 a 单引号&#xff1a;单引号输出字符串&#xff0c;字符串…

Nature好文:过去150年,科学与产业经历四段情缘!

来源&#xff1a;Nature 574, 481-485 (2019) doi: 10.1038/d41586-019-03172-5Nature&#xff08;《自然》&#xff09;创刊 150 周年之际&#xff0c;历史学家保罗卢西尔&#xff08;Paul Lucier&#xff09;特别撰写系列文章&#xff0c;回顾了这 150 年来科学体系的塑造。本…

python爬取网页有乱码怎么解决_Python爬取网页requests乱码

**之前有在裁判文书上爬取数据&#xff0c;这段时间重新运行爬虫后发现无法获取网页数据&#xff0c; 找了一下发现requests网页源码返回的是乱码** &#xff08;如下截取一部分返回的数据&#xff1a;不知道是不是网站对网页内容进行了加密&#xff0c;请问如何解决这个问题&a…