P15703MLE(BFS).。。。

题目


代码(肯定有错):
#include <bits/stdc++.h>
using namespace std;
int n,m,yux,yuy,yangx,yangy,kfcx,kfcy;
char mapp[210][210];
bool vis[210][210];
int dx={1,-1,0,0};
int dy={0,0,-1,1};
struct str{
int x,y,num;
};
queue q;
int bfs(int sx,int sy)
{
str tmp,tmp2;
tmp.x=sx,tmp.y=sy,tmp.num=0;
q.push(tmp);
while(!q.empty())
{
tmp=q.front();
q.pop();
int x=tmp.x,y=tmp.y,num=tmp.num;
if(x==kfcx && y==kfcy)
{
return num;
}
for(int i=0;i<4;i++)
{
if(x+dx[i]>=1 && y+dy[i]>=1 && x+dx[i]<=n && y+dy[i]<=m && !vis[x+dx[i]][y+dy[i]] && mapp[x+dx[i]][y+dy[i]]!=‘#’)
{
tmp2.x=x+dx[i];
tmp2.y=y+dy[i];
tmp2.num=tmp.num+1;
q.push(tmp2);
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mapp[i][j];
if(mapp[i][j]==‘@’)
{
yux=i,yuy=j;
}
else if(mapp[i][j]==‘&’)
{
yangx=i,yangy=j;
}
else if(mapp[i][j]==‘F’)
{
kfcx=i,kfcy=j;
}
}
}
vis[yux][yuy]=true;
int ret1=bfs(yux,yuy);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
vis[i][j]=false;
}
}
vis[yangx][yangy]=true;
int ret2=bfs(yangx,yangy);
cout<<max(ret1,ret2);
return 0;
}

4 个赞

应该是这里出问题
q.front()和q.pop()都是对队列的第一个元素进行操作,
至于结构体…我写bfs没用过(doge)

如果push能让所有结构体成员都入队,
那这个循环就s掉力(悲

标记数组呢

分别搜索两人到KFC的最少时间,取较大值

没事了,AC了已经

4 个赞