您的位置:首页 > 汽车 > 新车 > 城市建设_香港免费空间_seo入门培训课程_快速排序优化

城市建设_香港免费空间_seo入门培训课程_快速排序优化

2025/3/10 22:27:44 来源:https://blog.csdn.net/2301_81772249/article/details/146053578  浏览:    关键词:城市建设_香港免费空间_seo入门培训课程_快速排序优化
城市建设_香港免费空间_seo入门培训课程_快速排序优化

像这种最短路径啊,我们一般都是用的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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com