20612统计八连块 |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述 |
输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横竖或者对角线方向),就说它们属于同一个八连块。例如,下图中有两个八连块。 |
输入 |
第一行包括两个正整数m和n,由空格隔开,接下来的m行,每行n个字符,字符只包括“*”和“@”。 |
输出 |
一个自然数,表示八连块的个数。 |
输入示例 |
5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ |
输出示例 |
2 |
其他说明 |
数据范围:0<m,n<101。NYL出品 |
简单的八连块问题,直接用dfs,代码不多说了。
#include<iostream> #include<cstdio> using namespace std; int n,m,ans; char ch[1005][1005]; bool vis[1005][1005]; void dfs(int x,int y) { if(vis[x][y]==0&&ch[x][y]==‘@‘) { vis[x][y]=1; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); dfs(x+1,y+1); dfs(x+1,y-1); dfs(x-1,y+1); dfs(x-1,y-1); } return; } int main() { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>ch[i][j]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(vis[i][j]==0&&ch[i][j]==‘@‘) {ans++;dfs(i,j);} printf("%d",ans); //system("pause"); return 0; }
时间: 2024-10-11 22:42:03