BZOJ 1085: [SCOI2005]骑士精神 启发式搜索+迭代加深
来源:互联网 发布:景德镇房管局交易数据 编辑:程序博客网 时间:2024/05/18 16:15
1085: [SCOI2005]骑士精神
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2777 Solved: 1609
[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
HINT
Source
题解:
枚举步数然后深搜,状态就是空格的位置。
剪枝的话是用一个估价函数calc,记录下当前失配骑士的个数,因为每个骑士移到相应的位置至少需要1步,所以如果当前已走步数+失配骑士个数>规定步数的话,就直接返回false。
#include<bits/stdc++.h>using namespace std;const int N = 6;int t;int mp[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,}};int a[N][N];char s[N][N];int dx[8]={1,1,2,2,-1,-1,-2,-2};int dy[8]={-2,2,-1,1,-2,2,-1,1};void getmap(int &x,int &y){ for(int i=0;i<5;++i) scanf("%s",s[i]); for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ if(s[i][j]=='*') a[i][j]=2,x=i,y=j; else a[i][j]=s[i][j]-'0'; } } }int calc(){ int sum=0; for(int i=0;i<5;++i){ for(int j=0;j<5;++j){ if(mp[i][j]==2) continue; if(a[i][j]!=mp[i][j]) ++sum; } } return sum;}bool dfs(int d,int limit,int x,int y){ int cnt=calc(); if(!cnt) return true; if(cnt+d-1>limit) return false; for(int i=0;i<8;++i){ int xx=x+dx[i],yy=y+dy[i]; if(xx>=0&&xx<5&&yy>=0&&yy<5){ swap(a[xx][yy],a[x][y]); if(dfs(d+1,limit,xx,yy)) return true; swap(a[xx][yy],a[x][y]); } } return false;}int main(){ scanf("%d",&t); while(t--){ int x,y;getmap(x,y); int ans=0,flag=0; for(;;++ans){ if(dfs(1,ans,x,y)) break; if(ans==15) {ans=-1;break;} } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- BZOJ 1085: [SCOI2005]骑士精神 启发式搜索+迭代加深
- 【bzoj1085】【 [SCOI2005]骑士精神】启发式剪枝+迭代加深搜索
- SCOI2005 骑士精神(Knight) 启发式搜索 迭代加深
- bzoj1085 [SCOI2005]骑士精神 ( 迭代加深搜索 + A*启发式搜索 )
- bzoj1085 [SCOI2005]骑士精神 【迭代加深搜索】
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
- [SCOI2005][BZOJ1085][迭代加深+A*剪枝]骑士精神
- [学习][SCOI2005][bzoj1085]迭代加深 骑士精神
- 【SCOI2005】骑士精神(Knight)(DFS+迭代加深)
- BZOJ 1085 [SCOI2005]骑士精神 A* 搜索
- BZOJ 1085 [SCOI2005]骑士精神 A*搜索
- BZOJ 1085: [SCOI2005]骑士精神
- 【BZOJ 1085】 [SCOI2005]骑士精神
- bzoj 1085: [SCOI2005]骑士精神
- BZOJ 1085: [SCOI2005]骑士精神
- BZOJ 1085 [SCOI2005] 骑士精神
- bzoj 1085: [SCOI2005]骑士精神
- BZOJ-1085 SCOI 2005 骑士精神 迭代加深 A*爆搜
- cximage DrawStringEx 绘制中文文本时,会造成文字丢失问题
- Maven的依赖范围、依赖冲突、依赖排除和版本限定
- 1006. 换个格式输出整数 (15)
- 【python】简单的图片隐写术
- BEANSHELL SAMPLE 生成身份证号
- BZOJ 1085: [SCOI2005]骑士精神 启发式搜索+迭代加深
- Sublime Text快捷键去除空白行
- 套路/错误集/黑科技/好写法
- 页面前进一页
- 坚持#第224天~零基础自学云计算基础语言应用之Shell18~22节
- 银行数据
- 如何让文本可复制
- 五天面试五家硅谷顶尖公司并拿到五个Offer
- 怎样“无痛”全局替换字体