Description
圆星与盒星的贸易日渐繁荣,渐渐地盒星的人们发现生意越做越穷,于是他们找上了圆星的矛盾。但由于盒星人的智力普遍较低,盒星人计划向聪明的圆星人一起玩游戏,他们认为如果圆星人思考并取胜了那么就是一心一意做生意,反之则证明在坑他们。
高智商的圆星人并不想花时间和盒星人玩这种游戏,于是他交给了你。
游戏内容是迷宫,需要计算从迷宫中最“糟糕”的那一个点走出迷宫所需的步数(即使从这一点以最优的方式走向最靠近的出口,它仍然需要最多的步数)。
当然了,圆星人只能水平或垂直地在 X 或 Y 轴上移动,他们从来不走对角线。每移动到一个新的方格算作一步(包括移出迷宫的那一步)。
即求出从所有的点到任意一个出口的距离中所有最短路径的最大值
注意,本题是提交答案题,将最后一个样例的对应答案直接输出即可
Input
第一行输入两个整数a,ba,b表示长宽
接下来(2 imes b+1)行,每行(2 imes a+1)个字符
描述一个迷宫
Output
输出一个整数,表示走出迷宫的所有最短路径中的最大值
Sample Input 1
6 3
+ +-+-+-+-+-+
| |
+-+ +-+ +-+-+
| |
+-+-+-+-+-+ +
| |
+ +-+-+-+-+-+
Sample Output 1
7
Sample Input 5
38 100
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ + + +
| | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ + + +
| | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+ + +
| | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ + + +
| | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| |
+ + + + + + + + + + + + + + + +
| | | | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+ -+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ + + +
| | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+- -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | | | | | | | |
+ + + + + + + + + + + + + + + + + + +
| | | | | | | | | | | | | |
+-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+ +-+-+ +-+ +-+ +-+ +-+ +
| | | | | | | |
+-+-+-+-+ +-+-+ +-+-+ +-+ +-+-+-+ +-+-+-+-+ +-+-+
| | | | |
+ +-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+ +
| | | |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sample Output 5
267
题解
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
#define inf 0x3f3f3f3f
char map[500][500];//存储地图
int m,n;
//存储起始点x、y坐标
int sx[3];
int sy[3];
int cnt;
int answer;
bool book[500][500];//标记数组
int dis[500][500];//维护最短距离的最小值
struct node{
int x;
int y;
int sum;
};
node temp,now;
queue<node> que;
int dir1[4][2]={1,0,0,1,-1,0,0,-1};
int dir2[4][2]={2,0,0,2,-2,0,0,-2};
void bfs(int num){
//每次广搜前初始化
memset(book,0,sizeof(book));
while(!que.empty()){
que.pop();
}
temp.x=sx[num];
temp.y=sy[num];
temp.sum=0;
que.push(temp);//将起点加入队列
book[sx[num]][sy[num]]=1;//标记起点
while(!que.empty()){
now=que.front();//取出节点
que.pop();
int x=now.x;
int y=now.y;
int s=now.sum;
dis[x][y]=min(dis[x][y],s);//取最小值
//向四个方向遍历
for(int i=0;i<4;i++){
//走两格
int xx=dir2[i][0]+x;
int yy=dir2[i][1]+y;
//走一格
int zx=dir1[i][0]+x;
int zy=dir1[i][1]+y;
//如果是需要走两格
if(!book[xx][yy]&&map[xx][yy]==' '&&xx>=1&&xx<=2*n+1&&yy>=1&&yy<=2*m+1&&map[zx][zy]==' '&&(x!=sx[num]||y!=sy[num])){
book[xx][yy]=1;
temp.x=xx;
temp.y=yy;
temp.sum=s+1;
que.push(temp);
}
//如果从起点开始走的话,需要走一格
else if(!book[zx][zy]&&map[zx][zy]==' '&&zx>=1&&zx<=2*n+1&&yy>=1&&yy<=2*m+1&&x==sx[num]&&y==sy[num]){
book[zx][zy]=1;
temp.x=zx;
temp.y=zy;
temp.sum=s+1;
que.push(temp);
}
}
}
}
int main(){
scanf("%d%d",&m,&n);
getchar();
//初始化距离为无穷大
for(int i=1;i<=2*n+1;i++){
for(int j=1;j<=2*m+1;j++){
dis[i][j]=inf;
}
}
for(int i=1;i<=2*n+1;i++){
for(int j=1;j<=2*m+1;j++){
scanf("%c",&map[i][j]);
//从地图的四个边搜索起点
if(i==1||j==1||i==2*n+1||j==2*m+1){
if(map[i][j]==' '){
sx[++cnt]=i;
sy[cnt]=j;
}
}
}
getchar();
}
//从两个起点分别遍历一次
bfs(1);
bfs(2);
//从所有的距离中找到最大值
for(int i=1;i<=2*n+1;i++){
for(int j=1;j<=2*m+1;j++){
if(dis[i][j]!=inf){
answer=max(dis[i][j],answer);
}
}
}
printf("%d",answer);
return 0;
}
这道题核心就是宽搜,有点不同的就是这道题的输入格式很特殊,不是一个字符代表一个格子,而是四个+号围成一个格子,正常在迷宫中走需要走两格,从起点向迷宫中走得走一格,所以我们要分出走一格和走两格的情况
注意我们应该在将格子入队时就标记这个格子,而不是到这个格子时才标记。