统计八连块

统计八连块B612
难度级别:B;            运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述
输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。                        
输入
第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。
输出
一个自然数,表示八连块的个数。
输入示例
5 5 ****@ *@@*@ *@**@ @@@*@ @@**@
输出示例
2
其他说明
数据范围:0<m,n<101。
#include<iostream>
using namespace std;
char a[102][102];
int m,n,s[102][102];
void dsf(int i,int j,int id)
{
    if(i<0||i>=m||j<0||j>=n) return;
    if(s[i][j]>0||a[i][j]!='@') return;
    s[i][j]=id;
    dsf(i-1,j-1,id);
    dsf(i-1,j,id);
    dsf(i-1,j+1,id);
    dsf(i,j-1,id);
    dsf(i,j+1,id);
    dsf(i+1,j-1,id);
    dsf(i+1,j,id);
    dsf(i+1,j+1,id);
}
int main()
{
    int i,j,cnt=0;
    cin>>n>>m;
    for(i=0;i<m;i++)
    {
       cin>>a[i];
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(s[i][j]==0&&a[i][j]=='@')
            {
                dsf(i,j,++cnt);
            }
        }
    }
    cout<<cnt;
    system("pause");
}
蒟蒻总是更懂你✿✿ヽ(°▽°)ノ✿
原文地址:https://www.cnblogs.com/WWHHTT/p/6572443.html