P1747 好奇怪的游戏

简介: 《爱与愁的故事第三弹·shopping》娱乐章。

文章目录

一、P1747 好奇怪的游戏

总结


一、P1747 好奇怪的游戏

本题链接:P1747 好奇怪的游戏


题目:


《爱与愁的故事第三弹·shopping》娱乐章。


调调口味来道水题。


题目描述

爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点x1,y1和x2,y2上。它们得从点x1,y1和x2,y2走到1,1。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到1,1的最少步数,你能帮他解决这个问题么?


输入格式

第1行:两个整数x1,y1


第2行:两个整数x2,y2


输出格式

第1行:黑马到1,1的步数


第2行:白马到1,1的步数


输入输出样例

输入 #1

12 16

18 10

输出 #1

8

9

说明/提示

100%数据:x1,y1,x2,y2<=20


本博客给出本题截图:

image.png

AC代码

#include <iostream>
#include <algorithm>
#include <cstring>
#define x first
#define y second
using namespace std;
typedef pair <int, int> PII;
const int N = 100, M = N * N;
PII q[M];
bool st[N][N];
int dist[N][N];
int x1, y1, x2, y2;
int bfs(int sx, int sy)
{
    int dx[12] = {-2, -2, -1, 1, 2, 2, 2, 2, 1, -1, -2, -2};
    int dy[12] = {1, 2, 2, 2, 2, 1, -1, -2, -2, -2, -2, -1};
    memset(st, false, sizeof st);
    memset(dist, 0, sizeof dist);
    if (sx == 1 && sy == 1) return 0;
    int hh = 0, tt = 0;
    q[0] = {sx, sy};
    st[sx][sy] = true;
    while (hh <= tt)
    {
        auto t = q[hh ++];
        for (int i = 0; i < 12; i ++ )
        {
            int a = t.x + dx[i], b = t.y + dy[i];
            if (a < 1 || a > 100 || b < 1 || b > 100) continue;
            if (st[a][b]) continue;
            st[a][b] = true;
            dist[a][b] = dist[t.x][t.y] + 1;
            if (a == 1 && b == 1) return dist[a][b];
            q[++ tt] = {a, b};
        }
    }
    return -1;
}
int main()
{
    cin >> x1 >> y1;
    cout << bfs(x1, y1) << endl;
    cin >> x2 >> y2;
    cout << bfs(x2, y2) << endl;
    return 0;
}

当然我们不用st数组其实也是可以的

#include <iostream>
#include <algorithm>
#include <cstring>
#define x first
#define y second
using namespace std;
typedef pair <int, int> PII;
const int N = 100, M = N * N;
PII q[M];
int dist[N][N];
int x1, y1, x2, y2;
int bfs(int sx, int sy)
{
    int dx[12] = {-2, -2, -1, 1, 2, 2, 2, 2, 1, -1, -2, -2};
    int dy[12] = {1, 2, 2, 2, 2, 1, -1, -2, -2, -2, -2, -1};
    memset(dist, -1, sizeof dist);
    if (sx == 1 && sy == 1) return 0;
    int hh = 0, tt = 0;
    q[0] = {sx, sy};
    while (hh <= tt)
    {
        auto t = q[hh ++];
        for (int i = 0; i < 12; i ++ )
        {
            int a = t.x + dx[i], b = t.y + dy[i];
            if (a < 1 || a > 100 || b < 1 || b > 100) continue;
            if (dist[a][b] != -1) continue;
            dist[a][b] = dist[t.x][t.y] + 1;
            if (a == 1 && b == 1) return dist[a][b] + 1;
            q[++ tt] = {a, b};
        }
    }
    return -1;
}
int main()
{
    cin >> x1 >> y1;
    cout << bfs(x1, y1) << endl;
    cin >> x2 >> y2;
    cout << bfs(x2, y2) << endl;
    return 0;
}

总结

bfs板子题,这个题比较狗,没有给棋盘范围,开20的话只能过3个数据,50过8个数据,100才能去全过


目录
相关文章
|
Ubuntu Linux 网络安全
Linux:使用ntpdate命令同步更新系统时间
Linux:使用ntpdate命令同步更新系统时间
4891 0
|
网络虚拟化
华为交换机批量加入 Vlan 方法
华为交换机单独加入vlan太麻烦,思科有批量加入vlan的方法,华为也有。要求 1~6口划分到vlan2,6~12口划分到vlan3,13~18口划分到vlan4,19~24口划分到vlan5.25,~26 加入trunk.
4163 0
|
负载均衡 网络虚拟化 C++
|
4月前
|
人工智能 JSON 安全
构建AI智能体:四十九、MCP 生态的革命:FastMCP 如何重新定义 AI 工具开发
FastMCP是一个基于MCP协议的高性能Python框架,旨在简化AI模型与外部工具的集成开发。它通过装饰器、类型提示等现代Python特性,将MCP协议的标准化要求转化为Pythonic的开发体验。核心功能包括:工具注册(@mcp.tool)、资源管理(@mcp.resource)和提示词模板,支持自动生成JSONSchema、异步任务调度和错误处理。FastMCP通过三层架构(应用层、核心引擎、协议适配层)实现高效开发,典型应用场景如&quot;AI调用计算器工具&quot;只需简单装饰器即可完成工具
572 1
|
9月前
|
存储 安全 索引
机械硬盘文件丢失为何大概率能恢复
本文详解机械硬盘数据恢复原理与方法,涵盖误删、格式化、分区丢失等常见问题,解析恢复成功率及操作步骤,助你了解如何有效找回丢失数据。
|
存储 人工智能 算法
阿里云AI基础设施升级亮相,模型算力利用率提升超20%
阿里云AI基础设施升级亮相,模型算力利用率提升超20%
1370 18
|
人工智能 BI API
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
Dify-Plus 是基于 Dify 二次开发的企业级增强版项目,新增用户额度、密钥管理、Web 登录鉴权等功能,优化权限管理,适合企业场景使用。
1876 3
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
|
存储 安全 Linux
s3fs挂载S3对象桶
s3fs(Simple Storage Service File System)是一个基于FUSE(Filesystem in Userspace)的文件系统,它允许将S3(Simple Storage Service)或其他兼容S3 API的对象存储服务挂载到本地文件系统中,从而能够像访问本地磁盘一样访问远程对象存储。以下是通过s3fs挂载OBS(Object Storage Service,对象存储服务,这里以华为云OBS为例)对象桶的基本步骤: ### 一、环境准备 1. **安装s3fs**: - 对于CentOS系统,可以使用yum安装s3fs-fuse: ```
3028 7
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
1072 7
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南