zoukankan      html  css  js  c++  java
  • 小火山的围棋梦想

    Description

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

    Input

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

    Output

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

    Sample Input

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

    Sample Output

    Case 1:
    ***
    ***
    ***
    Case 2:
    .*..
    ***.
    ***.
    .*..
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <stack>
    #include <map>
    #include <vector>
    using namespace std;
    typedef long long LL;
    #define N 100
    #define met(a, b) memset(a, b, sizeof(a))
    #define INF 0x3f3f3f3f
    int n, m;
    int v[N][N];
    int f;
    char str[N][N];
    void dfs(int x,int y)
    {
        if(str[x][y]=='.'&&(x==0||y==0||x==n-1||y==m-1))
        {
            f = 1;
            return ;
        }
        else
        {
            if(x>=0&&y>=0&&x<n&&y<m&&v[x][y]==0&&str[x][y]=='.')
            {
                v[x][y]=1;
                dfs(x+1,y);
                dfs(x-1,y);
                dfs(x,y+1);
                dfs(x,y-1);
            }
            else
                return ;
        }
    }
    int main()
    {
        int T;
        scanf("%d", &T);
        int k = 1;
        while(T--)
        {
            scanf("%d%d",&n,&m);
            for(int i=0; i<n; i++)
                scanf("%s",str[i]);
    
            for(int i=0; i<n; i++)
                for(int j=0; j<m; j++)
                {
                    if(str[i][j] == '.')
                    {
                        memset(v,0,sizeof(v));
                        f = 0;
                        dfs(i,j);
                        if(f == 0)
                            str[i][j] = '*';
                    }
                }
                printf("Case %d:
    ",k++);
    
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<m; j++)
                    printf("%c",str[i][j]);
                    printf("
    ");
            }
    
    
        }
        return 0;
    }
  • 相关阅读:
    Spark的精简安装步骤---陈楠心血总结
    关于Hadoop的集群环境下虚拟机采用NAT方式连不上网的解决
    size_t总结
    POJ 1852 Ants
    Digital Roots 1013
    1350. Primary Arithmetic
    Word Reversal
    POJ 2876 Cantoring Along
    逆序数的求法
    C++ 中cin
  • 原文地址:https://www.cnblogs.com/biu-biu-biu-/p/5759943.html
Copyright © 2011-2022 走看看