[蓝桥杯2015决赛]穿越雷区 (BFS)
题目描述
X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
(图片来源网络,侵删)
某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?
已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -- + - - +
- + + + -
+ - + - +
B + - + -
坦克车只能水平或垂直方向上移动到相邻的区。
思路
首先想到的是dfs,每次更新最小值,于是,超时,,恍然大悟,改用bfs。
最短路问题通常都可以考虑使用BFS宽搜。
代码
#include using namespace std; int n; char mp[102][102]; int ans; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; bool st[102][102]; int flag=0; struct node{ int x,y,step; }; void bfs(int x,int y){ queueq; q.push({x,y,0}); st[x][y]=1; while(q.size()){ node t=q.front();q.pop(); x=t.x,y=t.y; int step=t.step; if(mp[x][y]=='B'){ flag=1; ans=step; return ; } for(int i=0;i=0&&xx=0&&yy>n; for(int i=0;imp[i][j]; } st[0][0]=1; for(int i=0;i
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。