小火山的围棋梦想
2016-08-13 11:54
232 查看
Description
小火山最近喜欢上了围棋。对于围棋,其实小火山是一窍不通的。现在棋盘上,有很多小火山的棋子。 如果棋盘上有这样的一个位置, 那么这个位置也会变成小火山
的棋子;这样的位置是指小火山的棋子将该位置围起来。
现在,小火山想知道实际棋盘是什么样子的。 你快来帮帮他吧!
Input
输入第一行是一个整数T(T <= 30), 表示一共有T组数据。每组数据,第一行为两个整数n, m(1 <= n, m <= 25), 随后一个n*m的矩阵代表棋盘,其中"."是代表没放棋子的位置, "*"代表小火山的棋子。
Output
对于每组数据输出一个n*m的棋盘, 代表实际的棋盘。Sample Input
23 3
***
*.*
***
4 4
.*..
*.*.
*.*.
.*..
Sample Output
Case 1:***
***
***
Case 2:
.*..
***.
***.
.*..
在做这道题是我可以想到搜到边界就不用被*化,但是我没想到如何把一个一个被困住的.给变成*;
现在知道了,找个字母标记一下,看代码吧。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char map[30][30]; int vis[30][30]; int dx[4]={1,-1,0,0}; int dy[4]={0,0,-1,1}; int m,n,good; void dfs(int u,int v) { int i; if(u==0||u==n-1||v==0||v==m-1) { good=1; return ; } for(i=0;i<4;i++) { int xx=u+dx[i]; int yy=v+dy[i]; if(xx>=0&&xx<=n-1&&yy>=0&&yy<=m-1&&map[xx][yy]=='.'&&!vis[xx][yy]) { vis[xx][yy]=1; dfs(xx,yy); } } return; } int main() { int t,i,j,k,h=1; scanf("%d",&t); while(t--) { int num=0; //memset(map,'.',sizeof(map)); scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%s",map[i]); for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(map[i][j]=='.') { memset(vis,0,sizeof(vis)); good=0;dfs(i,j); vis[i][j]=1; if(good==0) map[i][j]='*'; } } } printf("Case %d:\n",h++); for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%c",map[i][j]); printf("\n"); } } return 0; }
相关文章推荐
- 1908: 小火山的围棋梦想
- 【多校训练】ZZULIOJ 1908 小火山的围棋梦想
- zzulioj1908(小火山的围棋梦想)
- zzuli 1908: 小火山的围棋梦想(dfs)
- ZZULIOJ/ 郑轻 OJ 1908: 小火山的围棋梦想(DFS,题型模板)
- zzulioj 1908 小火山的围棋梦想(思维+dfs)
- 1908: 小火山的围棋梦想(dfs)
- 1908: 小火山的围棋梦想
- Problem H: 小火山的围棋梦想
- ZZULI-1905 小火山的围棋梦想 【BFS or DFS】
- Zzuli OJ-----1908 小火山的围棋梦想
- 小火山的围棋梦想
- 【zzuliOJ】1908 - 小火山的围棋梦想(dfs)
- ZZULIOJ 1908: 小火山的围棋梦想 (DFS)
- 小火山的围棋梦想(dfs)
- zzulioj1908: 小火山的围棋梦想(dfs)
- zzulioj-1908-小火山的围棋梦想【DFS】(好题)
- zzulioj 1908: 小火山的围棋梦想 (dfs)
- zzuliOJ 1908:小火山的围棋梦想(DFS+小思维)
- 小火山的围棋梦想