zzuli---联赛--围棋

围棋

Description

  小火山最近喜欢上了围棋。
  对于围棋,其实小火山是一窍不通的。现在棋盘上,有很多小火山的棋子。 如果棋盘上有这样的一个位置, 那么这个位置也会变成小火山
的棋子;这样的位置是指小火山的棋子将该位置围起来。
  现在,小火山想知道实际棋盘是什么样子的。 你快来帮帮他吧!

Input

输入第一行是一个整数T(T <= 30), 表示一共有T组数据。
每组数据,第一行为两个整数n, m(1 <= n, m <= 25),  随后一个n*m的矩阵代表棋盘,其中"."是代表没放棋子的位置, "*"代表小火山的棋子。

Output

对于每组数据输出一个n*m的棋盘, 代表实际的棋盘。
 

样例输入

2
3 3
***
*.*
***
4 4
.*..
*.*.
*.*.
.*..

样例输出

Case 1:
***
***
***
Case 2:
.*..
***.
***.
.*..

HINT

 

Source

zzuli

哎呀,还是练少了吧,比赛的时候还沉不下心来,这个深搜一点也不难嘛
1.首先从边界下手,如果边界是'.'的话,就开始进行搜索,把其本身和周围的'.'用数组vis标记为1(表示访问过)
2.要知道深搜就是递归的过程,如果边界的周围是'.',同样此点也会向四周进行搜索
3.那么剩下的没被标记过的'.'就代表被包围的,就将其变成'*';

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include<vector>
#include<algorithm>

using namespace std;
typedef long long LL;

const int maxn=110;
const int INF=0x3f3f3f3f;

char maps[maxn][maxn];
int vis[maxn][maxn];
int dir[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
int m, n;

void DFS(int x, int y)
{
    vis[x][y]=1;
    for(int i=0; i<4; i++)
    {
        int nx=x+dir[i][0];
        int ny=y+dir[i][1];

        if(nx>=0&&nx<n&&ny>=0&&ny<m&&maps[nx][ny]=='.'&&!vis[nx][ny])
            DFS(nx, ny);
    }
}

int main()
{
    int T, cas=1;
    scanf("%d", &T);

    while(T--)
    {
        scanf("%d %d", &n, &m);
        for(int i=0; i<n; i++)
            scanf("%s", maps[i]);

        memset(vis, 0, sizeof(vis));
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                if(i!=0&&j!=0&&i!=n-1&&j!=m-1)///如果不是边界直接跳过
                    continue;

                if(maps[i][j]=='.'&&!vis[i][j])///如果边界是'.'且没有被访问过
                    DFS(i, j);
            }
        }

        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
                if(maps[i][j]=='.'&&!vis[i][j])///没有被访问过的'.'(就是被'*'包围的)将其变成'*';
                    maps[i][j]='*';
        }

        printf("Case %d:
", cas++);
        for(int i=0; i<n; i++)
            puts(maps[i]);///printf("%s
", maps[i]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/w-y-1/p/5763804.html