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!!!\n", tt);
        else
            printf("Case #%d: Can not kill in one move!!!\n", tt);
    }

    return 0;
}

 

posted @ 2016-05-10 20:38  梦中。。  阅读(385)  评论(0编辑  收藏  举报