• 小火山的围棋梦想 多校训练2(小火山专场)Poj(DFS)


    http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1908

    分析:一开始很简单暴力的想着只要判断'*'是否能围成一个圈就好,但是发现好难写啊。。在比赛结束后,有人教我只需判断外围一圈的点就好,若它是'.'则对它进行标记。最后只需将未被标记的'.'变成'*'即可。

    #include <stdio.h>
    #include <algorithm>
    #include <string.h>
    #define maxn 30
    using namespace std;
    
    int dir[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
    char maps[maxn][maxn];
    int v[maxn][maxn];
    int n, m;
    
    void DFS(int x, int y)
    {
        v[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]=='.' && !v[nx][ny])
                 DFS(nx, ny);
        }
    }
    int main()
    {
        int T, cnt=1;
    
        scanf("%d", &T);
    
        while(T --)
        {
            scanf("%d %d", &n, &m);
    
            for(int i=0; i<n; i++)
                scanf("%s", maps[i]);
    
            memset(v, 0, sizeof(v));
    
            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]=='.' && !v[i][j])
                        DFS(i, j);
                }
            }
    
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<m; j++)
                {
                    if(!v[i][j] && maps[i][j]=='.')
                        maps[i][j]='*';
                }
            }
    
            printf("Case %d:
    ", cnt++);
    
            for(int i=0; i<n; i++)
                printf("%s
    ", maps[i]);
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    常用分页插件
    sessionStorage二种存值取值的方法
    $(this).index()与$(obj).index(this)的区别
    每次移1px的无缝轮播图
    为什么全局变量在赋值之前调用会报错
    Number()、parseInt()和parseFloat()的区别
    JSON.parse()与JSON.stringify()
    HDU
    出现负数的01背包问题
    HDU
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5763752.html
Copyright © 2020-2023  润新知