[AcWing 844] 走迷宫
2022/5/5 6:15:44
本文主要是介绍[AcWing 844] 走迷宫,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
BFS 使用STL中的queue
点击查看代码
#include<iostream> #include<cstring> #include<queue> using namespace std; typedef pair<int, int> PII; const int N = 100 + 10; int n, m; int g[N][N], d[N][N]; queue<PII> q; int bfs() { q.push({0, 0}); memset(d, -1, sizeof(d)); d[0][0] = 0; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; while (q.size()) { PII t = q.front(); q.pop(); for (int i = 0; i < 4; i ++) { int x = t.first + dx[i], y = t.second + dy[i]; if (x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0 && d[x][y] == -1) { d[x][y] = d[t.first][t.second] + 1; q.push({x, y}); } } } return d[n - 1][m - 1]; } int main() { cin >> n >> m; for (int i = 0; i < n; i ++) for (int j = 0; j < m; j ++) cin >> g[i][j]; cout << bfs() << endl; return 0; }
BFS 数组模拟队列
点击查看代码
#include<iostream> #include<cstring> using namespace std; typedef pair<int, int> PII; const int N = 100 + 10; int n, m; int g[N][N], d[N][N]; PII q[N * N]; int bfs() { int hh = 0, tt = 0; q[0] = {0, 0}; memset(d, -1, sizeof(d)); d[0][0] = 0; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; while (hh <= tt) { PII t = q[hh ++]; for (int i = 0; i < 4; i ++) { int x = t.first + dx[i], y = t.second + dy[i]; if (x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0 && d[x][y] == -1) { d[x][y] = d[t.first][t.second] + 1; q[++ tt] = {x, y}; } } } return d[n - 1][m - 1]; } int main() { cin >> n >> m; for (int i = 0; i < n; i ++) for (int j = 0; j < m; j ++) cin >> g[i][j]; cout << bfs() << endl; return 0; }
这篇关于[AcWing 844] 走迷宫的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享