题目链接
思路:将’#‘外围的’.‘先标记,然后再去改变’#‘周边的有标记的’.‘成’*’.
#include<bits/stdc++.h>
using namespace std;
int n,m;
int book[505][505];
char grid[505][505];
void dfs(int x,int y,int move[][2]){
for(int i = 0;i < 4;i++)
{
int xa = x + move[i][0];
int ya = y + move[i][1];
if(xa < 0 || ya < 0 || xa == n || ya == m) continue;
if(book[xa][ya] == 1 || grid[xa][ya] == '#') continue;
book[xa][ya] = 1;
dfs(xa,ya,move);
}
return ;
}
int main(){
int move[4][2] = {1,0,-1,0,0,1,0,-1};
cin>>n>>m;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
cin>>grid[i][j];
}
}
book[0][0] = 1;
dfs(0,0,move);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
if(grid[i][j] == '#')
{
for(int k = 0;k < 4;k++)
{
int xa = i + move[k][0];
int ya = j + move[k][1];
if(xa == n || ya == m || grid[xa][ya] == '*' || grid[xa][ya] == '#' || book[xa][ya] == 0) continue;
if(grid[xa][ya] == '.' && book[xa][ya] == 1)
{
grid[xa][ya] = '*';
}
}
}
}
}
for(int i = 0;i < n;i++)
{
for(int j = 0;j < m;j++)
{
cout<<grid[i][j];
}
cout<<endl;
}
return 0;
}