• 统计八连块


    输入一个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;
    }
  • 相关阅读:
    Git 生命周期
    Git 配置环境
    JAVA克隆对象报错:The method clone() from the type Object is not visible
    C# 将字符串按要求分解成字符串数组
    servlet 标红的错误笔记
    TIBCO Jaspersoft Studio 报表软件使用教程
    错误笔记4
    ^按位运算详解
    表现层状态转换
    servlet 读取文件
  • 原文地址:https://www.cnblogs.com/llllllpppppp/p/6590906.html
Copyright © 2020-2023  润新知