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){
- queue
q; - 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<4;i++){
- int xx=x+dx[i];
- int yy=y+dy[i];
- if(xx>=0&&xx
=0&&yy - q.push({xx,yy,step+1});
- st[xx][yy]=1;
- }
- }
- }
- }
- int main() {
- cin>>n;
- for(int i=0;i
- for(int j=0;j
>mp[i][j]; - }
- st[0][0]=1;
- for(int i=0;i
- for(int j=0;j
- if(mp[i][j]=='A'){
- bfs(i,j);break;
- }
- }
- }
- if(flag)
- cout<
- else cout<<-1;
- }
-
相关阅读:
博弈论(Nim游戏 , 有向图游戏)
ESB优势2019-架构师(六十二)
使用 Azure 静态 Web 应用服务免费部署 Hexo 博客
zabbix6.0 部署配置
Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战
两步随机接入机制的深度解析和未来增强
C语言实现扫雷游戏(分解代码,超级详细,无压力)
Selenium基础 — POM设计模式(一)
新人学习C++——VS2017报错windows SDK 8.1找不到_终于解决了
Diffusers中基于Stable Diffusion的哪些图像操作
-
原文地址:https://blog.csdn.net/qq_63128300/article/details/136345554