zoukankan      html  css  js  c++  java
  • HDU5546 Ancient Go DFS

    点击打开链接


    题意:给定一个9*9的棋盘,问黑子能否在下一步将白子围住(四面)。

    由于数据不大,可以直接将'.'换成'x',用DFS搜索。


    #include<cstdio>
    #include<cstring>
    using namespace std;
    char chess[11][11];
    bool visit[11][11];
    int turnx[4]={1,-1,0,0};
    int turny[4]={0,0,1,-1};
    int flag;
    bool in(int x,int y)
    {
        if(x<0||y<0||x>=9||y>=9)
        return 0;
        return 1;
    }
    void dfs(int x,int y)
    {
        if(chess[x][y]=='.')//如果有出路,则标记为0,说明在该点下子无法获胜
        {
            flag=0;
            return;
        }
        for(int k=0;k<4;k++)
        {
            int nx=x+turnx[k];
            int ny=y+turny[k];
            if(in(nx,ny)&&!visit[nx][ny]&&chess[nx][ny]!='x')
            {
                visit[nx][ny]=1;
                dfs(nx,ny);
            }
        }
    }
    int solve()
    {
        for(int i=0;i<9;i++)
        {
            for(int j=0;j<9;j++)
            {
                if(chess[i][j]=='.')
                {
                    chess[i][j]='x';
                    for(int k=0;k<4;k++)
                    {
                        int nx=i+turnx[k];
                        int ny=j+turny[k];
                        if(in(nx,ny)&&chess[nx][ny]=='o')
                        {
                            memset(visit,0,sizeof(visit));
                            visit[nx][ny]=1;
                            flag=1;
                            dfs(nx,ny);
                            if(flag)
                                return 1;//直接返回,跳出循环
                        }
                    }
                    chess[i][j]='.';//还原
                }
            }
        }
        return 0;
    }
    int main()
    {
        int T,cas=1;
        scanf("%d",&T);
        while(T--)
        {
            for(int i=0;i<9;i++)
            scanf("%s",chess[i]);
            flag=1;
            memset(visit,0,sizeof(visit));
            int ans=solve();
            if(ans)
                printf("Case #%d: Can kill in one move!!!
    ",cas++);
            else
                printf("Case #%d: Can not kill in one move!!!
    ",cas++);
        }
        return 0;
    }
    



  • 相关阅读:
    php二维数组排序
    重学C语言 -- printf,scanf
    php调试利器 -- xdebug
    composer php依赖管理工具
    现代php开发
    php新特性--持续更新
    2016年书单
    jenkins集成gitlab实现自动合并
    etcd安装
    nginx 日志切割
  • 原文地址:https://www.cnblogs.com/westwind1005/p/5975230.html
Copyright © 2011-2022 走看看