当前位置: 首页 > article >正文

蓝桥杯备考:bfs之马的遍历

像这种最短路径啊,我们一般都是用的bfs来求

像这道题,我们要定义dxdy两个方向向量

然后我们先把起点放在队列里面,然后把起点出队列,把最短路径是1的点放在队列里面,然后在再依次把最短路径是1的点出队列,把最短路径是2的点代入队列,一直到队列里没有元素时截至,进队列的同时我们要把这个队列的最短路径存到二维数组里面

方向向量的选择

BFS遍历过程

下面我们来展示代码

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 410;
int path[N][N];
typedef pair<int,int> PII;
int n,m,x,y;
int dx[] = {1, 2, 2, 1, -1, -2, -2, -1};
int dy[] = {2, 1, -1, -2, -2, -1, 1, 2};
void bfs()
{
	queue <PII> q;
	q.push({x,y});
	path[x][y] = 0;
	
	while(q.size())
	{
	 	auto t = q.front();q.pop();
	 	int px = t.first; int py = t.second;
		for(int i = 0;i<=7;i++)
		{
			int x = px+dx[i];int y = py+dy[i];
			if(x<1 || x>n || y<1 || y>m) continue;
			if(path[x][y]!=-1) continue;
			path[x][y] = path[px][py]+1;
			q.push({x,y});
		} 
	}
	
}
int main()
{
	cin >> n >> m >> x >> y;
	memset(path,-1,sizeof path);
	bfs();
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cout << path[i][j] << " ";
		}
		cout << endl;
	}
	
	
	
	
	
	return 0;
}


http://www.kler.cn/a/577772.html

相关文章:

  • Android AudioFlinger(一)——初识AndroidAudio Flinger
  • Vite 6 升级指南:CJS 和 ESM 的爱恨情仇
  • 单例设计模式---懒汉式--线程安全和不安全、枚举类
  • 用AI学编程4——swift学习1
  • Mac软件卸载后启动台图标还在
  • 基于深度学习的恶意软件检测系统:设计与实现
  • springmvc_view介绍
  • 4、STL的deque使用方法
  • SpringBoot知识点及其源码解析(3)
  • 华为eNSP:实验 OSPF单区域
  • 4.归一化技术:深度网络中的关键优化手段——大模型开发深度学习理论基础
  • 2025-03-08 学习记录--C/C++-C 语言 判断一个数是否是完全平方数
  • Naive UI 更换主题颜色
  • 《安富莱嵌入式周报》第351期:DIY半导体制造,工业设备抗干扰提升方法,NASA软件开发规范,小型LCD在线UI编辑器,开源USB PD电源,开源锂电池管理
  • LDR6500 PD 协议芯片的运用场景
  • uniapp 自定义地图组件(根据经纬度展示地图地理位置)
  • Web开发-PHP应用Cookie脆弱Session固定Token唯一身份验证数据库通讯
  • windows 平台如何点击网页上的url ,会打开远程桌面连接服务器
  • 第十二届蓝桥杯 异或数列
  • 【大模型理论篇】--Mixture of Experts架构