看题解好多用的都是struct存坐标和步数,我用的是cnt来存bfs层数,一开始是0。用一个pair存x坐标和y坐标。
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
int dx[4]={-1,1,0,0}; //上下左右
int dy[4]={0,0,-1,1};
char g[14][14]; //存储图
bool vis[14][14]; //是否遍历过
long long cnt; //每次扩展一层cnt++
queue<pii> q;
void bfs()
{
while(!q.empty())
{
cnt++;
auto t=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int x=t.first+dx[i];
int y=t.second+dy[i];
if(x<0||x>10||y<0||y>10||vis[x][y]||g[x][y]=='R')
continue;
vis[x][y]=1;
if(g[x][y]=='B')
return;
q.push({x,y});
}
}
}
int main()
{
for(int i=1;i<=10;i++)
{
for(int j=1;j<=10;j++)
{
cin>>g[i][j];
if(g[i][j]=='L')
{
q.push({i,j});
vis[i][j]=1;
}
}
}
bfs();
cout<<cnt;
return 0;
}