骑士精神 (HYSBZ - 1085 ,简单 A* 暴搜)

BZOJ1085 骑士精神(A*启发式搜索) 【题目描述】 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。 给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步数完成任务。 【输入格式】 第一行有一个正整数T(T<=1... 阅读详情

一.题目链接:

HYSBZ-1085

二.题目大意:

直接看题目,懒得解释.

三.分析:

其实就是一个简单 A* 搜索 的板子

为了方便,分析就写注释里了.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-4
#define PI acos(-1.0)
#define ll long long int
using namespace std;

int ans;
int mp[10][10];
int s[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 Move[8][2] = {
    {1, 2}, {1, -2}, {-1, 2}, {-1, -2},
    {2, 1}, {2, -1}, {-2, 1}, {-2, -1}
};/// 8 个方向

int check()///计算从 现地图 转化到 目标地图 所需的最佳代价 
{
    int cnt = 0;
    for(int i = 0; i < 5; ++i)
    {
        for(int j = 0; j < 5; ++j)
        {
            if(mp[i][j] != s[i][j])
                cnt++;
        }
    }
    return cnt;
}

void A_star(int y, int x, int g, int now)///类似于 dfs
{
    if(g == now)
    {
        if(check() == 0)/// 现地图 与 目标地图 相同
            ans = now;
        return;
    }
    if(~ans)/// ans != -1.
        return;
    for(int i = 0; i < 8; ++i)
    {
        int ny = y + Move[i][0];
        int nx = x + Move[i][1];
        if(ny < 0 || ny > 4 || nx < 0 || nx > 4)
            continue;
        swap(mp[y][x], mp[ny][nx]);
        if(check() + g <= now)
            A_star(ny, nx, g + 1, now);
        swap(mp[y][x], mp[ny][nx]);
    }
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        char ch;
        int y;
        int x;
        for(int i = 0; i < 5; ++i)
        {
            getchar();
            for(int j = 0; j < 5; ++j)
            {
                scanf("%c", &ch);
                if(ch == '*')
                {
                    y = i;
                    x = j;
                    mp[i][j] = 2;
                }
                else
                    mp[i][j] = ch - '0';
            }
        }
        ans = -1;
        for(int i = 0; i < 16; ++i)///枚举所需步数
        {
            A_star(y, x, 0, i);
            if(~ans)
                break;
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

【题解】洛谷P2324 骑士精神(A*算法 启发式搜索) 第一眼看到就可以枚举空白格子位置然后跑bfs,处理一些细节就可以,这样的话最优能30分。 为了让程序跑的更快,我们可以在读入队列某个元素时记录其和目标状态对应位置不同的数量,因为交换一下最多能消去两个格子(第一次),其他情况最多能消去一个格子,所以当前的步数+数量&gt;16或者当前步数&gt;=15(这里可以为等于因为在其前面已经有循环保证如果步数为15就输出结果并return)。这样还有一个... 阅读详情

相关推荐

两个独立的正态分布的和仍然为正态分布的证明

正态分布的和

weixin_40064300的博客 1万+

otto电棍 推箱子游戏实现(包含各种圣经)

代码里面包含了许多音频图片,只复制粘贴无法运行代码,我不知道这里面怎么放文件,所以有需要的OTTO粉可以私信我,我把所需要的文件发给你。里面还有许多彩蛋,谁玩谁知道。

lxyhhhhhcl的博客 393

用deepseek对GPU服务器进行压力测试

利用 DeepSeek 模型对 GPU 服务器进行压力测试,核心思路是通过,验证 GPU 服务器在计算、显存、网络等维度的承载能力,同时观察稳定性与性能瓶颈。

weixin_42795092的博客 1610

骑士精神

描述 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空 位上。 给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步数完成任务。 输入 第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有

blue_kid的博客 551

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

西门子S7-1500 PLC模块化编程与生产线自动化实践

PLC(可编程逻辑控制器)作为工业自动化核心设备,其模块化编程技术能显著提升产线控制系统的开发效率。通过SCL高级语言实现算法封装、功能块(FB)复用等工程实践,可构建稳定可靠的分层式控制架构。本文以西门子TIA Portal平台为例,详解S7-1500系列PLC在汽车零部件产线中的标准化应用方案,包含配方管理、设备联动等典型场景的SCL实现,以及Profinet通信、虚拟轴同步等进阶技巧。特别适用于需要快速实施中大型生产线自动化改造的工程师,提供经过验证的异常处理机制和模块化设计规范。

weixin_34341229的博客 459

Go语言“十诫”[译]

本文翻译自John Arundel的《Ten commandments of Go》[1]。全文如下:作为一名全职的Go语言作家[2]和老师[3],我花了很多时间和学生们一起,帮助他们写出...

TonyBai 4614

反激系列-详细到每个容阻的原理之RCD吸收(1)

1、漏感尖峰电压会被RCD吸收,漏感能量一定,电容越大,电容充电的电压就越低,吸收能力就越强,MOS漏极的电压就越低。2、在漏感能力释放完之后(这个过程一般只有一个周期的3%时间),是要通过R1释放掉电容吸收的能量的,把电容的电压降下来方便下一次漏感尖峰来之前再进行吸收。3、电容容量和电阻需要合理搭配,容量足够即可,足够能吸收漏感尖峰电压,不至于超过MOS耐压。电阻需要足够小,小到在放电阶段把电容电压下降到MOS的电压平台。

Cuxiaoweiba的博客 3万+

人工智能(A*算法)

Java实现A*算法求解骑士精神问题

m0_48079247的博客 1232

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

2020年大连理工大学《单片机原理及应用》期末试卷

2020年大连理工大学《单片机原理及应用》期末试卷 此试卷为大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷; 大连理工大学2020年《单片机原理及应用》期末试卷。 ...

无名何许人的博客 1479

(bzoj 1085 [SCOI2005]骑士精神)<A*>

A*

SDFZspli的博客 431

Allegro输出光绘文件规范

添加钻孔表的具体步骤为:1.通过屏幕右边的Visibility选项的Views列表,将Drill层打开2.将Visibility选项中的PIN和Via选项都选中,见下图所示: 参数设好之后关闭NC Drill/Parameters窗口,输出数控机床钻孔文件的命令菜单为:Manufacture=>NC=>NC Drill…,打开的窗口如下: 输出数控机床钻孔文件的具体步骤为: 上图是光绘输出的层控制窗口,还有一个窗口是输出参数的控制窗口,我们通过点击上图的第二个列表项General Parameters来

axingxiansen的博客 2809

【BZOJ1085】【SCOI2005】骑士精神(A*暴搜)

干净的痛苦一定会沉淀,沉淀成悠闲,悠闲是痛苦的补偿,痛苦是悠闲的衬垫。

zyf2000 1259

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

骑士精神 HYSBZ - 1085 迭代加深搜索

在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空 位上。 给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步 数完成任务。 Input 第一行有一个正整数T(T&lt;=10),表示一共有N组数据...

loooooog的博客 318

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【BZOJ 1085】 [SCOI2005]骑士精神

A*搜索~

Regina8023 1126

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

BZOJ 1085

1085: [SCOI2005]骑士精神 搜索+剪枝 BZOJ 1085 /************************************************************** Problem: 1085 User: Dream_Tonight Language: C++ Result: Accepted Time:684 ms ...

IRolle的博客 204

BZOJ 1085 骑士精神 A star algorithm DFS

#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; using namespace std; const int mmap[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...

shadandeajian的博客 273

BZOJ1085&&洛谷P2324骑士精神

中文题意不再赘述这是一道非常好的入门水题博主用的IDA*,因为题目中给了最大搜索深度,讲一讲做法先预处理一个end数组,代表地图最后要形成的样子,白旗为1,黑棋为0,空格为2然后模拟每个棋子向八个方向跳能不能跳到空格,这些都很容易想,但也容易超时所以我们要想剪枝我们不难发现,一次只能跳一个棋子,并且只会影响该棋子与空格的位置,那么我们在开始搜索前判断一下当前图中有多少棋子没有归位,那么我们就最少需...

AcerMoOi之路 490

[A*,启发式搜索] [SCOI2005] 骑士精神

链接:https://ac.nowcoder.com/acm/problem/20247来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑...

dixiangee374493的博客 349

IDA*算法——骑士精神

例题骑士精神 Description   在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。   给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘:      为了体现出骑士精神,他们必须以最少的步数完成任务。 Input

A1847225889的博客 1226

[BZOJ1085]骑士精神(深搜+A*算法)

[BZOJ1085]骑士精神(深搜+A*算法)

xjwwd的博客 657

BZOJ 1085 骑士精神 A*

Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空位上。 给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步数完成任务。 Input 第一行

秋名山 584

BZOJ1085-骑士精神(A*搜索)

BZOJ1085-骑士精神(A*搜索)

Anonymous_jacklovecj的博客 445

A*入门两题——第k短路问题 && [SCOI2005]骑士精神

A*算法网上有很多资料,在这里不想写…最主要的是估价函数f,估的是当前状态到最终状态的代价。设f′f'为真正的代价f<f′f<f',能搜到最优解,但是复杂度不优。f=′f′f='f',能搜到最优解,且复杂度最优。f>f′f>f',有可能搜不到最优解,但是跑得快。第k短路问题:其核心在于预处理出所有点到终点的最短路h。设g为起点到这个点的长度。f = g +h按f的大小从小到大取,用堆维护。每次取出来

Cold_Chair的博客 462
上一篇: Books Queries( CodeForces - 1066C,模拟 + 元素位置)
下一篇: Books (ZOJ - 4067,思维 + 理解题意)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值