统计八连块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"); }