一、题目

输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符所在的格子相邻(横、竖、或者对角线方向),就说它们属于同一个八连块。

二、解题思路

和前面的二叉树遍历类似,图也有DFS和BFS遍历。由于DFS更容易编写,一般用DFS找联通块:从每个“@”格子出发,递归遍历与之相邻的“@”格子,标记相同的“联通分量标号”。这样在访问之前需检查它是否已经有了编号,从而避免一个格子访问多次。

三、代码实现

 #include<stdio.h>
#include<iostream>
using namespace std; const int maxn = + ;
char field[maxn][maxn];
int N, M; void dfs(int x, int y)
{
field[x][y] = '*'; //这里通过把“@”换成“*”,从而避免重复
for (int dx = -; dx <= ; dx++)
for (int dy = -; dy <= ; dy++)
{
int nx = x + dx; int ny = y + dy;
if (nx >= && nx < N && ny >= && ny < M && field[nx][ny] == '@')
dfs(nx, ny);
}
return;
}
void slove()
{
int res = ;
for (int i = ; i < N; i++)
for (int j = ; j < M; j++)
{
if (field[i][j] == '@')
{
dfs(i, j);
res++; //遍历完一个连通分量,答案加一
}
}
printf("%d\n", res);
}
int main()
{
while (scanf("%d%d", &N, &M) == && N)
{
for (int i = ; i < N; i++)
for (int j = ; j < M; j++)
cin >> field[i][j]; slove();
}
return ;
}

最新文章

  1. LINQ to SQL语句(18)之运算符转换
  2. Android系统中应用的安装和卸载的监听
  3. 误删/usr文件夹解决办法
  4. 作业七:团队项目——Alpha版本冲刺阶段-11
  5. .NET Core第三方开源Web框架YOYOFx
  6. FlyCapture2 Qt5 MinGW Configuration
  7. Request 接收参数乱码原理解析
  8. C#字符串与char数组互转!
  9. 动软代码生成器 可用于生成Entity层,可更改模板 /codesmith 也可以
  10. 论山寨手机与Android 【11】移动网络规范的合纵连横
  11. hdu1565+hdu1569(最大点权独立集)
  12. POJ培训计划2253_Frogger(最短/floyd)
  13. MATLAB符号极限、导数及级数求和
  14. WeakHashMap和Java引用类型详细解析
  15. pyv8安装
  16. BZOJ 4513: [Sdoi2016]储能表 [数位DP !]
  17. jacascript 立即执行函数(IIFE)与闭包
  18. Java MD5加密与RSA加密
  19. Jmeter Thread Group中如果存在HTTP request执行失败,就对整个Thread Group重新执行,限定最大执行次数N次
  20. constructor属性解析

热门文章

  1. UVaLive 6854 City (暴力)
  2. Eclipse SVN 图标解释
  3. C# 选择文件路径,选择文件
  4. 为Docker容器设置静态IP
  5. 1118 Birds in Forest (25 分)
  6. C#递归得到特定文件夹下问件
  7. idea | SpringBoot项目热加载
  8. mvn从下载安装到纯命令行创建第一个mvn程序(编码,编译,测试,安装,打包)全过程细致分解
  9. pwnhub 相对路径覆盖
  10. python学习之高级特性: