• 围棋


    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述
    围棋的棋盘上有19*19条线交织成的361个交点,黑棋和白棋可以下在交点上。我们称这些交点为“目”。

    一个目的上下左右四个方向,称之为“气”,如果一个目的四个方向都被某一种颜色的棋子占据,那么即使这个目上并没有棋子,仍然认为这个目被该颜色棋子占据。

    如下图中,四个黑棋中心的交点,由于被黑棋包围,因此我们认为这个目属于黑棋,

    黑棋拥有4+1=5目


    在棋盘的边框地区,只要占据目的三个方向,就可以拥有这个目。

    黑棋拥有3+1=4目


    同理在棋盘的四个角上,只要占据目的两个气即可。


    黑棋拥有2+1=3目



    推而广之,当有多个目互相连通的时候,如果能用一种颜色把所有交点的气都包裹住,那么就拥有所有目。

    黑棋拥有6+2 = 8目


    请编写一个程序,计算棋盘上黑棋和白棋的目数。
    输入数据中保证所有的目,不是被黑棋包裹,就是被白棋包裹。不用考虑某些棋子按照围棋规则实际上是死的,以及互相吃(打劫),双活等情况。
    输入
    第一行,只有一个整数N(1<=N<=100),代表棋盘的尺寸是N * N
    第2~n+1行,每行n个字符,代表棋盘上的棋子颜色。

    “.”代表一个没有棋子的目
    “B”代表黑棋
    “W”代表白棋

    输出
    只有一行,包含用空格分隔的两个数字,第一个数是黑棋的目数,第二个数是白棋的目数。

    样例输入
    4
    ..BW
    ...B
    ....
    ....
    
    样例输出
    15 1
    dfs
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int fs[5]={1,0,-1,0,1};
    char map[102][102];
    int ans=0;
    bool vis[102][102];
    int u,v;
    void dfs(int x,int y) {
        vis[x][y]=true;
        ans++;
        if(map[x][y]=='W'||map[x][y]=='#')
            return;
        for(int i=0; i<4; i++) 
        {
            u=x+fs[i];
            v=y+fs[i+1];
            if(!vis[u][v]&&map[u][v]=='.') 
            {
                dfs(u,v);
            } 
        }
    }
    int main() {
        int n;
        memset(map,'#',sizeof(map));
        cin>>n;
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                cin>>map[i+1][j+1];
        ans=0;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(map[i][j]=='B'&&!vis[i][j])
                    dfs(i,j);
        cout<<ans<<" "<<n*n-ans<<endl;
        return 0;
    }
  • 相关阅读:
    SysUtils.UpperCase、SysUtils.LowerCase 大小写转换
    Sql Server 2005 数据库备份还原后出现“受限制用户”问题的解决
    为什么要跪谢
    【基础】C#卸载快捷方式添加
    DataTable 复制 DataRow 出现 “该行已经属于另一个表”错误的解决办法
    将int型转化成五位字符串,前面用0填充
    C#嵌套类的使用方法及特性(转)
    net内存回收与Dispose﹐Close﹐Finalize方法(转)
    sqlhelper中文注释版(转)
    windows2003消息队列的安装
  • 原文地址:https://www.cnblogs.com/sssy/p/7214736.html
Copyright © 2020-2023  润新知