Cheese Aizu - 0558 (BFS)
题目链接:https://vjudge.net/problem/Aizu-0558#author=GPT_zh
-
题意:
给你一个h*w的矩阵,(.代表空地。X代表障碍物,数字1~n分别代表n个不同的cheese)老鼠从起始位置S开始,挨个去找和它能力值(power)相等的cheese去吃,输出吃完n个cheese所需要的步长。 -
思路:
BFS搜索,即先找和power相同的cheese。
--找到后以此cheese的位置为基准再次开始搜索
--直到power==n+1结束搜索 -
注意:
BFS一定要开一个vis数组(要不然就来回搜,没有意义),并且在move的过程中将走过的点设置为false
可以定义一个结构体 记录该点坐标以及到达此坐标的步长 这样就可以记录总步长(每次上下左右走都为steps+1,走完上一步再将总步长steps设置为此坐标下的steps)
可以走的点有三种:"S",“.",以及其他非目标的cheese
重新BFS时将vis全部设置为true
#include<bits/stdc++.h> using namespace std; struct node{ pair<int,int>pos; int steps; node(int x,int y,int s):pos(x,y),steps(s){ } }; int h,w,n;int stx,sty; char field[2000][2000]; bool visit[2000][2000]; int power=1; int dx[]={0,0,-1,1}; int dy[]={1,-1,0,0}; int steps=0; void clear(queue<node>&q) { queue<node>empty1; swap(empty1,q); } void bfs(int x,int y) { queue<node>qu; node st(x,y,steps); qu.push(st); visit[x][y]=false; while(!qu.empty()) { node a=qu.front(); qu.pop(); steps=a.steps; if(power==n+1)return; for(int i=0;i<4;i++) { int nx=a.pos.first+dx[i]; int ny=a.pos.second+dy[i]; if(nx<1||nx>h||ny<1||ny>w||field[nx][ny]=='X'||visit[nx][ny]==false)continue; else if(field[nx][ny]=='S'||field[nx][ny]=='.'||(isdigit(field[nx][ny])&&field[nx][ny]-'0'!=power)) { qu.push((node){nx,ny,steps+1}); visit[nx][ny]=false; } else if(field[nx][ny]-'0'==power) { power++; clear(qu); qu.push((node){nx,ny,steps+1}); memset(visit,true,sizeof(visit)); visit[nx][ny]=false; break; } } } } signed main() { cin>>h>>w>>n; for(int i=1;i<=h;i++) { for(int j=1;j<=w;j++) { cin>>field[i][j]; if(field[i][j]=='S') { stx=i;sty=j; } } } memset(visit,true,sizeof(visit)); bfs(stx,sty); cout<<steps<<'\n'; return 0; }
- 知识点:
STLqueue队列的清空没有clear方法可以直接调用
那么我们可以定义一个void clear(queue&q)
在函数里开一个空的queue 并与引用的队列 swap
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现