zoukankan      html  css  js  c++  java
  • 围棋

    总时间限制: 
    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;
    }
  • 相关阅读:
    iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
    iOS NSArray数组过滤
    App Store2016年最新审核规则
    iOS 根据字符串数目,自定义Label等控件的高度
    iOS 证书Bug The identity used to sign the executable is no longer valid 解决方案
    Entity FrameWork 增删查改的本质
    EF容器---代理类对象
    Entity FrameWork 延迟加载本质(二)
    Entity FrameWork 延迟加载的本质(一)
    Entity FrameWork 增删查改
  • 原文地址:https://www.cnblogs.com/sssy/p/7214736.html
Copyright © 2011-2022 走看看