NC204861. 十面埋伏
描述
经过多年的征战,牛牛在与牛可乐的对决渐渐处于下风,于是牛牛决定对牛可乐来一次大围剿。
输入描述
第一行输入两个整数 和 ,表示地图的大小
下面 行每行 个字符, 表示空地, 表示士兵。保证输出的字符串只包含 和
输出描述
输出挖完陷阱后的地图,陷阱用 来表示.
示例1
输入:
6 5 ..... .###. .#.#. .###. ..##. .....
输出:
.***. *###* *#.#* *###* .*##* ..**.
示例2
输入:
10 10 .......... ..######.. .#######.. .#######.. .##.###... .##..##... .....##... .......... .......... ..........
输出:
..******.. .*######*. *#######*. *#######*. *##*###*.. *##**##*.. .**.*##*.. .....**... .......... ..........
说明:
C(clang11) 解法, 执行用时: 7ms, 内存消耗: 3708K, 提交时间: 2021-03-19 19:40:10
#include<stdio.h> struct duqi{ int x; int y; }; struct duqi d[250005]; int b[505][505]; int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1}; int main() { int i,j,k,l,n,m; scanf("%d%d",&n,&m); char a[505][505]; for(i=0;i<n;i++) scanf("%s",a[i]); i=0;j=0;int x0,y0; d[0].x=0;d[0].y=0;b[0][0]=1; for(;i<=j;i++){ for(l=0;l<4;l++){ x0=d[i].x+dx[l]; y0=d[i].y+dy[l]; if(a[y0][x0]=='.'&&b[y0][x0]==0){ b[y0][x0]=1; d[++j].x=x0;d[j].y=y0; } else if(a[y0][x0]=='#') a[d[i].y][d[i].x]='*'; } } for(i=0;i<n;i++)printf("%s\n",a[i]); }
C++14(g++5.4) 解法, 执行用时: 47ms, 内存消耗: 21472K, 提交时间: 2020-04-20 17:54:25
#include<iostream> using namespace std; char s[505][505]; int flag[505][505]; int n,m; void bfs(int x,int y){ if(x<1||y<1||x>n||y>m)return; if(flag[x][y]==1||s[x][y]=='#')return ; flag[x][y]=1; if(s[x+1][y]=='#'||s[x][y+1]=='#'||s[x-1][y]=='#'||s[x][y-1]=='#')s[x][y]='*'; bfs(x,y-1); bfs(x-1,y); bfs(x+1,y); bfs(x,y+1); } int main(){ cin>>n>>m; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cin>>s[i][j]; } } bfs(1,1); for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cout<<s[i][j]; }cout<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 39ms, 内存消耗: 9704K, 提交时间: 2020-04-26 16:46:26
#include<iostream> using namespace std; char mp[503][503]; int n,m,to[4][2]={0,1,0,-1,1,0,-1,0},vis[502][502]; void dfs(int x,int y){ vis[x][y]=1; for(int i=0;i<4;i++){ int xx=x+to[i][0]; int yy=y+to[i][1]; if(xx<1||xx>n||yy<1||yy>m||vis[xx][yy]) continue; if(mp[xx][yy]=='#') mp[x][y]='*'; else dfs(xx,yy); } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>mp[i][j]; } } dfs(1,1); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<<mp[i][j]; } cout<<endl; } return 0; }