好奇怪的游戏(BFS)

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int dx[] = {1,1,2,2,-1,-1,-2,-2,2,2,-2,-2};
int dy[] = {2,-2,1,-1,2,-2,1,-1,2,-2,2,-2};

int bfs(int a,int b){
    queue<pair<int,int>> q;
    vector<vector<int>> dis(20,vector<int>(20,-1)); // 20x20的棋盘,初始化所有位置的步数为-1
    dis[a][b] = 0;
    q.push({a,b});


    while(q.size()){
        auto [x,y] = q.front();
        q.pop();

        if(dis[0][0] != -1){//一旦目标位置 (0, 0) 的步数已经被计算出来,直提前结束 BFS。
            return dis[0][0];;
        }

        for(int i=0;i<12;i++){
            int nx = x + dx[i];
            int ny = y + dy[i];

            if(nx>=0 && nx<20 && ny>=0 && ny<20 && dis[nx][ny]==-1){
                dis[nx][ny] = dis[x][y] + 1;// 更新最短步数
                q.push({nx,ny}); // 将新的位置加入队列
            }
        }
    }
    return dis[0][0];
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int x1,x2,y1,y2;
    cin>>x1>>y1>>x2>>y2;
    x1--,x2--,y1--,y2--; // 将坐标调整为0基索引
    cout<<bfs(x1,y1)<<endl;
    cout<<bfs(x2,y2);

    return 0;
}

注意将坐标调整为0基索引

相关推荐
nianniannnn几秒前
c++复习自存--流、异常处理、多线程与C++工程规范
开发语言·c++
geovindu10 分钟前
CSharp: Dijkstra Algorithms
开发语言·后端·算法·c#
学逆向的35 分钟前
汇编——位运算
开发语言·汇编·算法·网络安全
可编程芯片开发1 小时前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法
学究天人1 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷2)
算法·数学建模·动态规划·图论·抽象代数·拓扑学
知无不研1 小时前
缺省参数与缺省函数的区别
c++·语法
玛卡巴卡ldf2 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
wanzehongsheng2 小时前
零碳产业园光伏园区光伏电站追踪对比固定:发电增益技术边界分析
算法·光伏发电·光伏·零碳园区·太阳能追光·低碳环保·追踪电站
KobeSacre3 小时前
CyclicBarrier 源码
java·jvm·算法
手写码匠3 小时前
注意力机制全家桶:从 Multi-Head 到 GQA 再到 Flash Attention 的手写实现
人工智能·深度学习·算法·aigc