BZOJ 1085 骑士精神
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 3229 Solved: 1908
[Submit][Status][Discuss]
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
题解
看数据范围不大,A*搜索,估价函数为剩余没有到达的骑士的个数。
代码
#include<bits/stdc++.h>using namespace std;
//const int MAXN = int ans=16;
int T,n,a[10][10];
int xx[8]={-2,-1,1,2,2,1,-1,-2},yy[8]={1,2,2,1,-1,-2,-2,-1};
int win[5][5]={1,1,1,1,1,0,1,1,1,1,0,0,2,1,1,0,0,0,0,1,0,0,0,0,0};inline int jud(){int sum=0;for(register int i=1;i<=5;i++)for(register int j=1;j<=5;j++){if(a[i][j]!=win[i-1][j-1]) sum++;}return sum;
}inline void dfs(int x,int y,int prex,int prey,int cnt){if(x==prex && y==prey) return;if(cnt>15) return; int kk=jud();if(kk==0) {ans=min(ans,cnt);return;}if(kk+cnt>ans) return;for(int k=0;k<=7;k++){int i=x+xx[k];int j=y+yy[k];if(i>=1 && i<=5 && j>=1 && j<=5){a[x][y]^=a[i][j]^=a[x][y]^=a[i][j];dfs(i,j,x,y,cnt+1);a[x][y]^=a[i][j]^=a[x][y]^=a[i][j];}}
}int main(){ios::sync_with_stdio(false);cin>>T;while(T--){char ch;int sti,stj;ans=16;for(register int i=1;i<=5;i++){for(register int j=1;j<=5;j++){ cin>>ch;if(ch=='0') a[i][j]=0;else if(ch=='1') a[i][j]=1;else a[i][j]=2,sti=i,stj=j;
// cout<<a[i][j];}
// cout<<"\n";}dfs(sti,stj,0,0,0);if(ans>15) cout<<-1<<endl;else cout<<ans<<endl;}return 0;
}
BZOJ 1085 骑士精神相关推荐
- BZOJ 1085 骑士精神 迭代加深搜索+A*
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1085 题目大意: 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个 ...
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1663 [Submit][St ...
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- bzoj 1085: [SCOI2005]骑士精神(IDA*)
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2296 Solved: 1328 [Submit][St ...
- 1085: [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2 ...
- BZOJ1085 [SCOI2005] 骑士精神
[问题描述] 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相 ...
- bzoj1085骑士精神(搜索)
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1893 Solved: 1051 Description ...
- [SCOI2005][BZOJ1085] 骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1112 Solved: 604 [Submit][Sta ...
- bzoj1085: [SCOI2005]骑士精神(a*)
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2555 Solved: 1472 [Submit][St ...
最新文章
- java定义一个盒子类box_定义一个Box(盒子)类,在该类定义中包括数据成员: length(长),width(宽)和height(...
- 指定Gradle构建属性
- css裁剪clip-path画多边形
- 【转】asp.net Core 系列【一】——创建Web应用
- SinoBBD跨入大数据产业发展新模式
- java与模式孙悟空_悟空模式-java-工厂方法模式
- 下载基于LigerUI+JBPM5自定义表单+Node.js的J2EE大型金融项目《财务预算系统》
- 收藏精美网页设计作品的200佳网站推荐(系列五)
- Python配置opencv并在命令行运行
- 排序算法-桶排序(入门级别)
- cloudera search1.0.0环境搭建(2):利用flume-ng的MorphlineSolrSink实现近实时(NRT)搜索
- 【c语言课程设计】C语言校园卡管理系统
- ubuntu20.04安装无线网卡驱动
- Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage We noticed that your app requires
- 如何显示 word 左侧目录大纲
- 『杭电1897』SnowWolf‘s Wine Shop
- 中国大学mooc c语言作业,中国大学mooc程序设计入门——C语言:第三周测验(示例代码)...
- P1567 统计天数(洛谷)
- SQL 常用基础语句
- Huggingface简介及BERT代码浅析
热门文章
- vue router html模板,vue.router
- Http是传输层吗?TCP是个么层?IP/TCP与HTTP的关系?
- 2017年9月10日训练日记
- jq里的event对象
- Python库的安装详解
- 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法
- K-Means聚类算法---C++
- 聚类(2)——层次聚类 Hierarchical Clustering
- Plants vs. Zombies(二分)
- python同时运行多个程序_如何同时运行两个python循环?