P2802 回家(BFS)C++
2021/7/14 12:34:55
本文主要是介绍P2802 回家(BFS)C++,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
P2802 回家
输入输出样例
输入
3 3 2 1 1 1 1 0 1 1 3
输出
4
参考的是某个博主的思路
#include<iostream> #include<stdio.h> #include<iomanip> #include<stack> #include<queue> #include<cstdlib> #include <algorithm> #include<string.h> #include<math.h> #define llu unsigned long long using namespace std; int a[15][15]={0};//构造地图 int vis[15][15]={0}; //记录该点的血量 int dir[4][2] = { {0,1},{0,-1},{1,0},{-1,0} }; bool flag=false; struct node{ int dx,dy,step,hp; }ans,t; queue<node> q; void bfs(int n,int m) { while(!q.empty()&&!flag) { t=q.front(); q.pop(); if(t.hp==1)continue;//hp=1了,已经没戏了,这次就跳过去吧; for(int i=0;i<4&&!flag;i++) { if(a[t.dx+dir[i][0]][t.dy+dir[i][1]])//这个点不是障碍物 if(vis[t.dx+dir[i][0]][t.dy+dir[i][1]]<t.hp-1)//如果血量更大,可以试试 { ans.dx = t.dx+dir[i][0]; ans.dy = t.dy+dir[i][1]; ans.step=t.step+1; ans.hp = a[ans.dx][ans.dy]==4?6:t.hp-1; vis[ans.dx][ans.dy]=ans.hp; if(a[ans.dx][ans.dy]==3)flag=true; q.push(ans); } } } } int main() { int n,m,ax,ay; cin >> n >> m ; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin >> a[i][j] ; if(a[i][j]==2) ax=i,ay=j; } } /*for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout << a[i][j] << " "; } cout << endl ; }*/ q.push(node({ax,ay,0,6})); vis[ax][ay]=6; bfs(n,m); if(flag)cout << ans.step << endl ; else cout << "-1" << endl ; return 0; }
这篇关于P2802 回家(BFS)C++的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享
- 2024-11-19将文件或目录压缩并保留到指定的固定目录怎么实现?-icode9专业技术文章分享
- 2024-11-19使用 tar 命令压缩文件并且过滤掉某些特定的目录?-icode9专业技术文章分享
- 2024-11-18Nacos安装入门教程
- 2024-11-18Nacos安装入门:轻松掌握Nacos服务注册与配置管理
- 2024-11-18Nacos配置中心入门:新手必读教程