zoukankan      html  css  js  c++  java
  • HDU 5546 Ancient Go (ccpc2015南阳G)

    作为一个弱渣,比赛时各种花式wa,今天尝试做了做,发现那时候理解的题意都不对。

    题意:把一个'.'换成'x'是否可以由'x'围起来一些字母,而且这些字母全是'o'。(之前以为能围住'o'就行,原来题意是围住的里面也不能有'.')。

    题意:枚举每一个'.',使其变成'x',在这一点周围四个点为方向进行DFS,遇到'x'返回,如果存在一个DFS过程中没发现'.'即存在。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <cmath>
    #include <cstdlib>
    #include <map>
    
    using namespace std;
    
    char str[15][15];
    bool visit[15][15];
    int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
    int f;
    
    void DFS(int x, int y)
    {
        int xx, yy;
        if(str[x][y]=='.')
        {
            f=1;
            return ;
        }
        if(str[x][y]=='x')
            return ;
        for(int i=0; i<4; i++)
        {
            xx = x+dir[i][0];
            yy = y+dir[i][1];
            if(xx>=1&&xx<=9&&yy>=1&&yy<=9&&visit[xx][yy]==false)
            {
                visit[xx][yy] = true;
                DFS(xx, yy);
            }
        }
    }
    
    int solve()
    {
        for(int i=1; i<=9; i++)
        {
            for(int j=1; j<=9; j++)
            {
                if(str[i][j]=='.')
                {
                    str[i][j] = 'x';
                    int xx, yy;
                    for(int k=0; k<4; k++)
                    {
                        xx = i+dir[k][0];
                        yy = j+dir[k][1];
                        if(xx>=1&&xx<=9&&yy>=1&&yy<=9&&str[xx][yy]=='o')
                        {
                            memset(visit, false, sizeof(visit));
                            visit[xx][yy] = true;
                            f = 0;
                            DFS(xx, yy);
                            if(f==0)
                                return 1;
                        }
                    }
                    str[i][j] = '.';
                }
            }
        }
    
        return 0;
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        for(int tt=1; tt<=t; tt++)
        {
            for(int i=1; i<=9; i++)
            {
                scanf("%s", str[i]+1);
            }
            memset(visit, false, sizeof(visit));
            int ans = solve();
            if(ans)
                printf("Case #%d: Can kill in one move!!!
    ", tt);
            else
                printf("Case #%d: Can not kill in one move!!!
    ", tt);
        }
    
        return 0;
    }
  • 相关阅读:
    [root@192 ~]# ls /etc/sysconfig/network-scripts
    解决unknown import path "golang.org/x/sys/unix": unrecognized import path "golang.org/x/sys"
    Centos 修改IP地址、网关、DNS
    Centos7 下安装golang
    yum国内镜像配置
    grep -R --include=*.log warning /var/log
    第五章 单例模式(待续)
    第四章 工厂模式(待续)
    第三章 装饰者模式(待续)
    第二章 观察者模式(待续)
  • 原文地址:https://www.cnblogs.com/mengzhong/p/5479309.html
Copyright © 2011-2022 走看看