BZOJ 1085: [SCOI2005]骑士精神(A*算法)
第一次写A*算法(这就是A*?如果这就是A*的话,那不就只是搜索的一个优化了= =,不过h函数如果弄难一点真的有些难设计)
其实就是判断t+h(x)(t为当前步数,h(x)为达到当前状态的最小步数) 是否小于当前答案k罢了
已经连续几道题因为一些小问题而调了很久了,不能这样啊QAQ
CODE:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int ans[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 xx[8]={1,-1,2,-2,1,-1,2,-2};
int yy[8]={2,2,1,1,-2,-2,-1,-1};
int a[5][5];
int k=16;
int judge(int a[5][5]){
for (int i=0;i<5;i++)
for (int j=0;j<5;j++)
if (a[i][j]!=ans[i][j]) return 0;
return 1;
}
int eva(int a[5][5],int t){
int l=0;
for (int i=0;i<5;i++)
for (int j=0;j<5;j++)
if (a[i][j]!=ans[i][j]) l++;
if (l+t>=k) return 0;
return 1;
}
bool flag;
int search(int t,int a[5][5],int x,int y){
if (t>=k) return 0;
if (judge(a)) {flag=1;k=min(k,t);return 0;}
for (int i=0;i<8;i++){
int nowx=x+xx[i],nowy=y+yy[i];
if (nowx>=0&&nowx<5&&nowy>=0&&nowy<5) {
swap(a[x][y],a[nowx][nowy]);
if (eva(a,t)) search(t+1,a,nowx,nowy);
swap(a[x][y],a[nowx][nowy]);
}
}
return 0;
}
int main(){
int t,x,y;
scanf("%d",&t);
while (t--){
flag=0;k=16;
for (int i=0;i<5;i++) {
char c[10];
scanf("%s",c);
for (int j=0;j<5;j++) {
if (c[j]=='0') a[i][j]=0;
if (c[j]=='1') a[i][j]=1;
if (c[j]=='*') {a[i][j]=2;x=i;y=j;}
}
}
search(0,a,x,y);
if (flag) printf("%d\n",k);
else printf("-1\n");
}
return 0;
}
BZOJ 1085: [SCOI2005]骑士精神(A*算法)的更多相关文章
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1663 [Submit][St ...
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- bzoj 1085: [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ...
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 分析: 首先第一感觉是宽搜,但是空间需要8^15*5*5,明显不够,又鉴于最大深 ...
- BZOJ.1085.[SCOI2005]骑士精神(迭代加深搜索)
题目链接 最小步数这类,适合用迭代加深搜索. 用空格走代替骑士. 搜索时记录上一步防止来回走. 不需要每次判断是否都在位置,可以计算出不在对应位置的骑士有多少个.而且每次复原一个骑士至少需要一步. 空 ...
- bzoj 1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 迭代加深搜索. 估价函数是为了预计步数来剪枝,所以要优于实际步数. 没错,不是为了确定 ...
- bzoj 1085: [SCOI2005]骑士精神 IDA*
题目链接 给一个图, 目标位置是确定的, 问你能否在15步之内达到目标位置. 因为只有15步, 所以直接ida* #include<bits/stdc++.h> using namespa ...
随机推荐
- 部分网站允许空白referer的防盗链图片的js破解代码
Reference: http://www.114390.com/article/27125.htm Javascript源码: 复制代码代码如下: function showImg( url ) { ...
- python流程控制:for循环
for循环: 先来看一个猜年龄的小程序: AGE = 23 count = 0 for i in range(10): if count == 3: u_count = input("y|n ...
- struts配置文件和国际化
一.加载包struts2-core-2.3.24.1.jar struts-default.xml :各种栈 org.apache.struts2 -->> default.propert ...
- Iphone安装铃声
PP助手 应用列表中打开铃声多多文档. 5点击铃声下载,找到下载的铃声,按下图所示步骤导出至电脑. 6在PP助手界面内,找到"视频音乐"标签,然后进入视频音乐分类下的铃声分类,点击 ...
- CSS border三角、圆角图形生成技术简介
http://www.zhangxinxu.com/wordpress/?p=794 一.前言 利用CSS的border属性可以生成一些图形,例如三角或是圆角.纯粹的CSS2的内容,没有兼容性的问题, ...
- SVN:cannot map the project with svn provider解决办法
转自:http://www.blogjava.net/jzone/articles/337697.html 首先,叙述一下令人蛋疼的情况,纠结了我几个小时,更新Workspace原有的项目,显示更新成 ...
- C#创建datatable (转)
C#创建datatable 方法一: DataTable tblDatas = new DataTable("Datas"); DataColumn dc = null; dc ...
- $(function(){})和$(document).ready(function(){}) 的区别
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
- 最近iOS开发遇到的问题
1)计算器,编辑框键盘: 2)类间参量引用传递: 3)饼状图: 4)折线图: 5)uicollection使用: 6)富文本开发: 7)separatorInset,layoutMargins uit ...
- phpcms 杂乱总结
1.根据catid 获取 栏目名称 $CATEGORYS = getcache('category_content_'.$siteid,'commons'); $name = {$CATEGORYS[ ...