确实不错的题,考bfs却不寻常,k的出现增加了题目难度,而且队列的运用也不一般,不需要搜完之后再入队,就是遍历k遍图,每一遍遍历把当前图中所有的g找出来入队,所有的入队之后,然后每一次取队头,拓展四周变成g,然后再取队头,直到队列空,进行下一次遍历,再扫描一遍图,把当前图的g都入队,再次拓展,挨个拓展完后,队列空了,再次扫描,把g们都入队,再次拓展 请在此处填写你的解题思路
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010;
typedef pair<int,int> PII;
queue<PII> q;
char mp[N][N];
int n,m,k;
void bfs()
{
while(!q.empty())
{
auto t=q.front();
q.pop();
int x=t.first,y=t.second;
mp[x][y-1]='g';
mp[x-1][y]='g';
mp[x+1][y]='g';
mp[x][y+1]='g';
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
}
}
cin>>k;
while(k--)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]=='g') q.push({i,j});
bfs();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<mp[i][j];
}
cout<<endl;
}
return 0;
}