题目链接:

题意:给你一个图,图中有不能走的障碍物,和两人,以及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.。。。。。。)