C.十面埋伏(DFS&连通块)
题意:将”#“图案用星号围一圈并输出图。
思路:显然从外围DFS,判断一下四周有无#即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mp[505][505];
int vis[505][505],d[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y){
//printf("x=%d,y=%d\n",x,y);
if(x<1||x>n||y<1||y>m) return;
if(vis[x][y]||mp[x][y]=='#') return;
vis[x][y]=1;
for(int i=0;i<4;i++){
int nx=x+d[i][0],ny=y+d[i][1];
if(mp[nx][ny]=='#') mp[x][y]='*';
}
dfs(x+1,y),dfs(x-1,y),dfs(x,y+1),dfs(x,y-1);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%s",mp[i]+1);
dfs(1,1);
for(int i=1;i<=n;i++)
printf("%s\n",mp[i]+1);
return 0;
}