1 条题解
-
0
自动搬运
来自洛谷,原作者为

fish_love_cat
「要毁灭世界,根本不需要邪恶。起初,那些都是不会被任何人怪罪的小小愿望。而那样的愿望却如此轻易地,和末日相连在一起。」搬运于
2025-08-24 22:40:51,当前版本为作者最后更新于2023-04-21 13:30:26,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
01 迷宫的弱化版,BFS 版子题,哪要什么最短路……
唯一的区别就是没有墙了,改成只能走不同辐射区域。定义数组存辐射区能量正负极和安全区,所以要用整型变量。初始所有图内的点全部为真能走,走过的点不再重走置为假。所以只要这地方为真而且正负极与当前不同,即可入队。
如果下一步是目的地,直接返回值即可。
代码长这样:
#include<bits/stdc++.h> using namespace std; int n,sx,sy,ex,ey; int f[105][105]; bool b[105][105]; struct wz{ int x,y,ans; }; queue<wz> q; int gx[4]={1,-1,0,0}; int gy[4]={0,0,1,-1}; int bfs(){ wz a; a.x=sx; a.y=sy; a.ans=0; q.push(a); b[sx][sy]=false; while(!q.empty()){ a=q.front(); q.pop(); for(int i=0;i<4;i++){ wz xin; xin.x=a.x+gx[i]; xin.y=a.y+gy[i]; xin.ans=a.ans+1; if(xin.x==ex&&xin.y==ey) return xin.ans; if(b[xin.x][xin.y]&&f[xin.x][xin.y]!=f[a.x][a.y]) q.push(xin),b[xin.x][xin.y]=false; } } return -1; } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ char c; cin>>c; if(c=='+') f[i][j]=1; if(c=='-') f[i][j]=-1; if(c=='A') sx=i,sy=j; if(c=='B') ex=i,ey=j; b[i][j]=true; } } cout<<bfs(); return 0; }
- 1
信息
- ID
- 5941
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者