zoukankan      html  css  js  c++  java
  • [1443] Weiqi

    • [1443] Weiqi

    • http://ac.nbutoj.com/Problem/view.xhtml?id=1443
    • 时间限制: 1000 ms 内存限制: 65535 K
    • 问题描述
    • Have you ever played Weiqi?
      In a composition, there exist two kinds of chess pieces black and white.
      The problem is so easy, can you find out how many white pieces are encircled by blacks? 

    • 输入
    • First line will contain two integers M and N (3 <= M, N <= 100), means the size of the composition.
      Then M lines, each line N integers only including '1', '2', and '0' ('1' represent black piece, '2' represent white piece and '0' represent empty).
    • 输出
    • Print how many white pieces are encircled by black. 
    • 样例输入
    • 4 4
      0012
      0121
      0111
      0101
      4 4
      0012
      0121
      0101
      0111
      
    • 样例输出
    • 1
      0
      
    • 提示
    • 详情看样例输入输出
    • 来源
    • Hungar
    • 操作
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    char map[110][110];
    int vis[110][110];
    
    int m,n,flag,tag;
    
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    
    int cnt;
    
    void DFS(int x,int y){
        for(int i=0;i<4;i++){
            int sx=x+dir[i][0];
            int sy=y+dir[i][1];
            if(sx<0 || sx>=m || sy<0 || sy>=n || map[sx][sy]=='1')
                continue;
            if(map[sx][sy]=='0' || sx==0 || sx==m-1 || sy==0 || sy==n-1)
                tag=1;
            //printf("22222\n");
            //printf("x=%d y=%d\n",x,y);
            //printf("sx=%d sy=%d\n",sx,sy);
            //printf("------- cnt=%d\n",cnt);
            if(!vis[sx][sy]){
                vis[sx][sy]=1;
                cnt++;
                DFS(sx,sy);
            }
        }
    }
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        while(~scanf("%d%d",&m,&n)){
            getchar();
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++)
                    scanf("%c",&map[i][j]);
                getchar();
            }
            memset(vis,0,sizeof(vis));
            int ans=0;
            for(int i=1;i<m-1;i++)
                for(int j=1;j<n-1;j++){
                    if(map[i][j]=='2' && !vis[i][j]){
                        //printf("i=%d j=%d\n",i,j);
                        vis[i][j]=1;
                        cnt=1;
                        tag=0;
                        DFS(i,j);
                        //printf("cnt=%d\n",cnt);
                        if(!tag)
                            ans+=cnt;
                    }
                }
            printf("%d\n",ans);
        }
        return 0;
    }
  • 相关阅读:
    Vmware安装CentOs7+gitlab(一)
    设计模式(一) 动态代理初尝试
    APP 技术支持
    App隐私条款
    Mac OS X中开启或关闭显示隐藏文件命令
    软件工程学习要点
    如何实现企业信息化
    记录一些flutter学习网址
    基于深度学习的语义分割
    对自动变速器的控制器建模
  • 原文地址:https://www.cnblogs.com/jackge/p/3052626.html
Copyright © 2011-2022 走看看