题目描述

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:
复制

2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100
输出样例#1: 复制

7
-1

说明

迭代次数dep

A*算法是利用估价函数h()进行剪枝

h()大于实际值就会错误

h()小于实际值太多效率会底下

所以h要慎重考虑

此题h可以这么计算:

当前棋盘有cnt个与目标棋盘不同的棋子

如果cnt等于0,那么退出

如果cnt不等于0,那么说明至少要走cnt-1步

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
char ch[][];
int s[][];
const int ss[][]=
{{,,,,},
{,,,,},
{,,,,},
{,,,,},
{,,,,}};
int sx,sy,deeeep,flag;
const int dx[]={,-,,-,,-,,-},dy[]={,,,,-,-,-,-};
int h()
{int i,j;
int cnt=;
for (i=;i<=;i++)
{
for (j=;j<=;j++)
{
if (s[i][j]!=ss[i][j]) cnt++;
}
}
return cnt;
}
void dfs(int x,int y,int sum,int dep)
{int i;
if (flag) return;
int H=h();
if (!H)
{
flag=;
return;
}
if (sum+H->dep) return;
int xx,yy;
for (i=;i<;i++)
{
xx=x+dx[i],yy=y+dy[i];
if (xx<||yy<||xx>=||yy>=) continue;
swap(s[x][y],s[xx][yy]);
dfs(xx,yy,sum+,dep);
swap(s[x][y],s[xx][yy]);
}
}
int main()
{int T,i,j;
cin>>T;
while (T--)
{
for (i=;i<=;i++)
{
scanf("%s",ch[i]);
for (j=;j<=;j++)
if (ch[i][j]=='*') sx=i,sy=j,s[i][j]=;
else s[i][j]=ch[i][j]-'';
}
deeeep=;
flag=;
while (deeeep<=)
{
dfs(sx,sy,,deeeep);
if (flag) break;
deeeep++;
}
if (flag==) printf("-1\n");
else printf("%d\n",deeeep);
}
}

[SCOI2005]骑士精神的更多相关文章

  1. BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1800  Solved: 984[Submit][Statu ...

  2. 【bzoj1085】[SCOI2005]骑士精神

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1757  Solved: 961[Submit][Statu ...

  3. BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )

    一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...

  4. BZOJ_1085_[SCOI2005]骑士精神_IDDFS

    BZOJ_1085_[SCOI2005]骑士精神_DFS Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可 ...

  5. [luogu P2324] [SCOI2005]骑士精神

    [luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...

  6. 【洛谷】2324:[SCOI2005]骑士精神【IDA*】

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  7. BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】

    BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  8. BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2838  Solved: 1663 [Submit][St ...

  9. 洛谷 P2324 [SCOI2005]骑士精神 解题报告

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  10. 【洛谷2324】[SCOI2005]骑士精神 IDA*

    [SCOI2005]骑士精神 描述 在一个\(5×5\)的棋盘上有\(12\)个白色的骑士和\(12\)个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为 ...

随机推荐

  1. 【Spring源码深度解析学习系列】核心类介绍(一)

    一.DefaultListableBeanFactory 首先看一下结构 由图可知XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListabl ...

  2. Leetcode 14——Longest Common Prefix

    题目:Write a function to find the longest common prefix string amongst an array of strings. 很简单的一个描述,最 ...

  3. PTA題目的處理(三)

    题目7-1 高速公路超速處罰 1.實驗代碼 #include <stdio.h> //#include <stdlib.h> int main() { int csp,lsp; ...

  4. 201621123043 《Java程序设计》第8周学习总结

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 contains的源代码如下 public boolean contain ...

  5. 学生ID查询

    var http = require("http"); var server = http.createServer(function(req,res){ //得到url var ...

  6. WPF自学入门(十一)WPF MVVM模式Command命令

    在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...

  7. python random 模块的用法

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  8. 新概念英语(1-133)Sensational news!

    Lesson 133 Sensational news! 爆炸性新闻! Listen to the tape then answer this question. What reason did Ka ...

  9. restful架构风格设计准则(四)资源表示和资源访问

    读书笔记,原文链接:http://www.cnblogs.com/loveis715/p/4669091.html,感谢作者! 一.资源表示 1.资源表示:使用 单数 vs. 复数 如果一个URL所对 ...

  10. OpenID Connect 是什么?

    一.OpenID Connect的概念 1.OpenID Connect 是什么? OpenID Connect 是一套基于 OAuth 2.0 协议的轻量级规范,提供通过 API 进行身份交互的框架 ...