Find a way bfs搜索 容易出错

题目链接:
题意:给你一个图,图中有不能走的障碍物,和两人,以及n个(n>=1)KFC,现在要求找到其中一个KFC,让两个人人
走到这个KFC的时间总和最小;
   
   
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
ll max(int a,int b) {return a>b?a:b;};
ll min(int a,int b) {return a<b?a:b;};
char f[205][205];
int xa,ya,xb,yb;
int dx[5]={-1,1,0,0};
int dy[5]={0,0,1,-1};
int vis[205][205];
ll step[205][205];
ll total[205][205];
int n,m;
int legal(int x,int y)
{
if(x<0||y<0||x>=n||y>=m) return 0;
else if(vis[x][y]) return 0;
else if(f[x][y]=='#') return 0;
return 1;
}

void bfs(int x,int y)
{
memset(vis,0,sizeof(vis));
memset(step,inf,sizeof(step));
step[x][y]=0;
vis[x][y]=1;
queue<int> qx;
queue<int> qy;
qx.push(x);qy.push(y);
while(qx.size())
{
int tx=qx.front();qx.pop();
int ty=qy.front();qy.pop();
for(int i=0;i<4;i++)
{
int rx=tx+dx[i];
int ry=ty+dy[i];
if(!legal(rx,ry)) continue;
step[rx][ry]=step[tx][ty]+1;
vis[rx][ry]=1;
qx.push(rx);qy.push(ry);
}
}
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%s",f[i]);
for(int j=0;j<m;j++)
if(f[i][j]=='M')
{xa=i;ya=j;}
else if(f[i][j]=='Y')
{xb=i;yb=j;}
}
//cout<<xa<<" "<<ya<<" "<<xb<<" "<<yb<<endl;
memset(total,0,sizeof(total));
bfs(xa,ya);

for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
// cout<<step[i][j]<<endl;
total[i][j]+=step[i][j];
}
bfs(xb,yb);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
total[i][j]+=step[i][j];

ll ans=inf;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(f[i][j]=='@')
if(total[i][j]<inf)
ans=min(ans,total[i][j]);
//printf("%d\n",total[i][j]);
}
printf("%lld\n",ans*11);
}
return 0;
}

这道题本来没什么的!!但是有个很恶心的坑点,就是并不是每个KFC都可以达到的,,所以将step初始化为0就错了(
因为这样初始化为0的话,如果两个人,都不能到达这个KFC,那么最终total读取的值就为0,也就是这个两个人都无法达到
的点输出总的时间是0.。。。。。。)
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值