• 统计八连块


    输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。                        
    输入
    第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。
    输出
    一个自然数,表示八连块的个数。
    输入示例
    5 5
    ****@
    *@@*@
    *@**@
    @@@*@
    @@**@
    输出示例
    2
    其他说明
    数据范围:0<m,n<101。
    #include<iostream>
    using namespace std;
    const int MAXN=101;
    char a[MAXN][MAXN];
    int m,n,flag[MAXN][MAXN];
    void dfs(int i,int j,int id)
    {
        if(i<0 || i>=m || j<0 || j>=n) return; //判断是否出界
        if(flag[i][j]>0 || a[i][j]!='@') return; //如果已经访问过或者非‘@’字 
        flag[i][j]=id; //标记第i行第j列的字符被访问过
        dfs(i-1,j-1,id);
        dfs(i-1,j,id);
        dfs(i-1,j+1,id);
        dfs(i,j-1,id);
        dfs(i,j+1,id);
        dfs(i+1,j-1,id);
        dfs(i+1,j,id);
        dfs(i+1,j+1,id);//八个方向
    }    
    int main()
    {
        int i,j,cnt=0;
        cin>>m>>n;
        for(i=0;i<m;i++) cin>>a[i];
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                if(flag[i][j]==0 && a[i][j]=='@') dfs(i,j,++cnt);
            }
        }
        cout<<cnt; 
        return 0;
    }
  • 相关阅读:
    makefile vpath变量
    博客园 文章和随笔区别
    Linux OpenGL 实践篇-6 光照
    HTC Vive 叠影器无法创建设备
    Mybatis注解
    MyBatis缓存
    MyBatis关联映射
    动态sql
    MyBatis智能标签
    Mybatis模糊查询及自动映射
  • 原文地址:https://www.cnblogs.com/llllllpppppp/p/6590906.html
Copyright © 2020-2023  润新知