【蓝桥杯-bfs】找钥匙回家
2018-02-27 21:50
309 查看
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#include<queue>
int xx[4]={0,0,1,-1};
int yy[4]={1,-1,0,0};
struct point
{
int x,y;
point(int xx,int yy)
{
x=xx;
y=yy;
}
};
queue<point> q1;
queue<point> q2;
static int n,m;
int visit1[2010][2010];
int visit2[2010][2010];
int step1[2010][2010];
int step2[2010][2010];
char b[2010][2010];
void bfs1(int sx,int sy)
{
q1.push(point(sx,sy));
visit1[sx][sy]=1;
while(q1.empty()!=true)
{
point a=q1.front();
q1.pop();
for(int i=0;i<4;i++)
{
int xxx=a.x+xx[i];
int yyy=a.y+yy[i];
if(xxx<0 || yyy<0 || xxx>n-1 || yyy>m-1 || b[xxx][yyy]=='#' ||visit1[xxx][yyy]==1)
continue;
visit1[xxx][yyy]=1;
q1.push(point(xxx,yyy));
step1[xxx][yyy]=step1[a.x][a.y]+1; //最重要,bfs第一次走到的即最短路
}
}
}
void bfs2(int tx,int ty)
{
q2.push(point(tx,ty));
visit2[tx][ty]=1;
while(q2.empty()!=true)
{
point a=q2.front();
q2.pop();
for(int i=0;i<4;i++)
{
int xxx=a.x+xx[i];
int yyy=a.y+yy[i];
if(xxx<0 || yyy<0 || xxx>n-1 || yyy>m-1 || b[xxx][yyy]=='#' ||visit2[xxx][yyy]==1)
continue;
visit2[xxx][yyy]=1;
q2.push(point(xxx,yyy));
step2[xxx][yyy]=step2[a.x][a.y]+1; //最重要,bfs第一次走到的即最短路
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cin>>b[i][j];
}
memset(visit1,0,sizeof(visit1));
memset(visit2,0,sizeof(visit2));
memset(step1,0,sizeof(step1));
memset(step2,0,sizeof(step2));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(b[i][j]=='S')
bfs1(i,j);
if(b[i][j]=='T')
bfs2(i,j);
}
}
int minn=1e10;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(b[i][j]=='P' && visit1[i][j]==1 && visit2[i][j]==1)
{
if(minn>step1[i][j]+step2[i][j])
minn=step1[i][j]+step2[i][j];
}
}
}
cout<<minn;
return 0;
}思路就是分别从S和T进行两次全体bfs,最后枚举每个P,找到和是最少的那个。
附上修改前的错误:
1:数组大小不对。
2:minn 初始化为正无穷,你的太小了
3:他们可能会到达不了,step1[i][j] 中的某个点。
相关文章推荐
- hrbust/哈理工oj 1617 回家【BFS+BFS】
- 2017年蓝桥杯A组 跳蟋蟀 (BFS)
- 2016 第七届 蓝桥杯第7题 剪邮票(bfs+dfs)
- 蓝桥杯 暗恋 简单搜索或者暴力或者bfs
- 蓝桥杯 第十题 分酒 (BFS(广度优先搜索)
- 学霸的迷宫-蓝桥杯算法提高-广搜 bfs 经典问题
- 蓝桥杯训练: 学霸的迷宫(bfs)
- 走迷宫+钥匙和门(bfs)
- 蓝桥杯-学霸的迷宫(BFS+记录操作)
- 蓝桥杯 PREV-19 九宫重排 (BFS + hash)
- 蓝桥杯 历届试题 九宫重排 BFS Java
- 蓝桥杯_算法提高_学霸的迷宫(BFS方法)
- 蓝桥杯 剪邮票 (DFS+BFS)
- 【蓝桥杯-bfs队列】走迷宫2
- 蓝桥杯 算法提高 学霸的迷宫 经典BFS问题
- 蓝桥杯 历届试题 九宫重排(bfs)
- 蓝桥杯---剪格子(DFS&BFS)(小总结)
- 回家_洛谷U3427_dfs&bfs
- 蓝桥杯BFS 移动方格的问题
- 蓝桥杯 学霸的迷宫 (BFS)