BFS专题8 中国象棋

编程入门 行业动态 更新时间:2024-10-27 20:38:34

BFS专题8 <a href=https://www.elefans.com/category/jswz/34/1753730.html style=中国象棋"/>

BFS专题8 中国象棋

题目:

样例:

输入
3 3 2 1
输出
3 2 1
0 -1 4
3 2 1

思路:

        单纯的BFS走一遍即可,只是方向坐标的移动变化,需要变化一下。

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define x first
#define y second
#define mk make_pair
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 500;
using PII = pair<int,int>;
// 象棋走动的方向
int dx[8] = {2,2,-2,-2,1,-1,1,-1};
int dy[8] = {1,-1,1,-1,2,2,-2,-2};int g[N][N],n,m;	// 象棋棋盘以及大小
bool st[N][N];	// 标记是否走过当前坐标
PII now;	// 当前象棋坐标inline bool isRun(int &x,int &y)
{return (x > 0 && x <= n && y > 0 && y <= m && !st[x][y]);
}inline void BFS()
{// 初始化坐标所对应的最少步数memset(g,-1,sizeof g);g[now.x][now.y] = 0;	// 初始化起点步数为 0int step = 0;queue<PII>q;q.emplace(now);while(q.size()){int sz = q.size();while(sz--){PII tem = q.front();q.pop();	// 取出当前坐标st[tem.x][tem.y] = true;	// 标记当前坐标g[tem.x][tem.y] = step;	// 存储当前坐标所对应的最少步数// 尝试往各个方向坐标走动for(int i = 0;i < 8;++i){int bx = tem.x + dx[i];int by = tem.y + dy[i];if(isRun(bx,by)){// 如果符合走动条件// 存储下一个走动的坐标,并标记q.emplace(mk(bx,by));st[bx][by] = true;}}}++step;}
}// 打印棋盘各个坐标所对应的最少步数
inline void PrintG()
{for(int i = 1;i <= n;++i){for(int j = 1;j <= m;++j){if(j > 1) cout << ' ';	// 控制输入格式cout << g[i][j];}cout << endl;}
}inline void solve()
{cin >> n >> m >> now.x >> now.y;	// 输入所对应的信息BFS();	// BFS 搜索各个坐标所对应的最少步数PrintG();	// 输出答案
}int main()
{
//	freopen("a.txt", "r", stdin);IOS;int _t = 1;
//	cin >> _t;while (_t--){solve();}return 0;
}

最后提交:

更多推荐

BFS专题8 中国象棋

本文发布于:2023-12-05 15:32:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1664574.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中国象棋   专题   BFS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!