您的位置:首页 > 产品设计 > UI/UE

ZZUILOJ-【1908: 小火山的围棋梦想】

2016-08-20 11:58 423 查看

1908: 小火山的围棋梦想

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 495  Solved: 139

SubmitStatusWeb
Board

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:.*..***.***..*..

HINT

Source

zzuli

想了好长时间也不会,看了别人的代码,才知道那么简单     别人的链接   点击打开链接

<span style="font-size:18px;">#include<cstdio>
#include<cstring>
char map[30][30];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int flag;
int n,m;
struct node
{
int x;
int y;
};
void dfs1(int sx,int sy)
{
node now;
map[sx][sy]='\0';
now.x=sx;now.y=sy;
for(int i=0;i<4;++i)
{
node end;
end.x=now.x+dx[i];
end.y=now.y+dy[i];
if(end.x<=0||end.x>n||end.y<=0||end.y>m)
{
flag=0;//可以走出边界,没有被包围
continue;
}
if(map[end.x][end.y]=='.')
dfs1(end.x,end.y);
}
}
void dfs2(int sx,int sy)//代表着被包围
{
map[sx][sy]='*';
node now;
now.x=sx;now.y=sy;
for(int i=0;i<4;++i)
{
node end;
end.x=now.x+dx[i];
end.y=now.y+dy[i];
if(map[end.x][end.y]=='\0')
dfs2(end.x,end.y);
}
}
int main()
{
int t,text=1;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int i,j;
for(i=1;i<=n;++i)
scanf("%s",map[i]+1);
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
if(map[i][j]=='.')
{
flag=1;
dfs1(i,j);
if(flag)
dfs2(i,j);
}
}
}
printf("Case %d:\n",text++);
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
if(map[i][j]=='\0')
printf(".");
else
printf("*");

}
printf("\n");
}
}
return 0;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: