zoukankan      html  css  js  c++  java
  • 20612统计八连块

    统计八连块

    【试题描述】

           输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。

                             

    【输入要求】

    第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。

    【输出要求】

    一个数,表示八连块的个数

    【输入实例】

    5 5
    ****@
    *@@*@
    *@**@
    @@@*@
    @@**@
    

     

    【输出实例】

    2

    【其他说明】

    数据范围:0<m,n<101。LJX出品

    【试题分析】

        很经典的dfs,老师讲的是:一开始先进入图中,然后找到一个@,从此开始搜,如果不是,退回。这时当时刚刚接触dfs时的题,很简单。

    【代码】

    #include<iostream>
    #include<cstring>
    int mm[101][101],r[101][101];  
    void lk(int x, int y)  
    {
        if(!mm[x][y]||r[x][y]) return;
        r[x][y]=1;
        lk(x-1,y-1); //周围全搜一遍
    	lk(x-1,y+1);
    	lk(x+1,y-1);
    	lk(x+1,y+1); 
    	lk(x-1,y);
    	lk(x+1,y);
        lk(x,y-1);
    	lk(x,y+1);
    }
    int main()  
    {
        int n,i,j,m,ans=0;  
        char s[101];
        scanf("%d%d",&n,&m);  
        for (i=0;i<n;i++)
        {
            memset(s,0,sizeof(s));  
            scanf("%s",s);  
            for (j=0;j<m;j++)//这里是把整个地图的记录移了一下,从0变成1了
            	if(s[j]=='@')mm[i+1][j+1]=1;
                else mm[i+1][j+1]=0;
        }
        for(i=1;i<=n;i++)  
            for(j=1;j<=m;j++)  
                if(!r[i][j]&&mm[i][j])  
                { 
                    ans++;
                    lk(i,j);
                }
        printf("%d
    ",ans);
    }  
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/wxjor/p/5618379.html
Copyright © 2011-2022 走看看