这是bfs的简单应用,经过k次繁衍,也就是说我们要进行k次bfs ,每一次先遍历一遍图,把是草的字符位置找出来,压入队列中,然后进行bfs,处理这几个草,繁衍完后进行下一次bfs ,直到k==0 ;
#include<iostream> #include<cstring> #include<algorithm> #include<queue> using namespace std ; const int N = 1010 ; struct node{//记录点 int x , y ; node(int xx,int yy){ x = xx , y = yy ; } }; int d[4][2] = {{1,0},{-1,0},{0,-1},{0,1}}; char mp[N][N] ;//记录图 queue<node> q ; int n , m , k ; int main(){ cin >> n >> m ; for(int i = 0 ; i < n ; i ++) cin >> mp[i] ; cin >> k ; while(k --){ //遍历图,找出草的位置压入队列 for(int i = 0; i < n ; i ++){ for(int j= 0 ; j < m ; j ++){ if(mp[i][j] == 'g') q.push(node(i,j)); } } //进行一次bfs把草都处理一遍 while(!q.empty()){ node now = q.front() ; q.pop() ; int tx = now.x , ty = now.y ; for(int i = 0 ; i < 4 ; i ++) { int dx = tx + d[i][0] , dy = ty + d[i][1] ; if(dx<0||dx>=n||dy<0||dy>=m) continue ; mp[dx][dy] = 'g' ; } } } for(int i = 0 ; i < n ; i ++) cout << mp[i] << endl ; return 0 ; }