[蓝桥杯2015决赛]穿越雷区 (BFS)

03-01 1958阅读

题目描述

X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。

[蓝桥杯2015决赛]穿越雷区 (BFS)
(图片来源网络,侵删)

某坦克需要从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
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]