这道题类似于联通图问题,将联通的归成一个,数一下总共有几个即可。

因为题目告诉不会有空格,所以排除标记用空格表示即可。


Property Distribution

Aizu - 0118

タナカ氏が HW アールの果樹園を残して亡くなりました。果樹園は東西南北方向に H × W の区画に分けられ、区画ごとにリンゴ、カキ、ミカンが植えられています。タナカ氏はこんな遺言を残していました。

果樹園は区画単位でできるだけ多くの血縁者に分けること。ただし、ある区画の東西南北どれかの方向にとなりあう区画に同じ種類の果物が植えられていた場合は、区画の境界が分からないのでそれらは 1 つの大きな区画として扱うこと。

例えば次のような 3 × 10 の区画であれば ('リ'はリンゴ、'カ'はカキ、'ミ'はミカンを表す)

同じ樹がある区画の間の境界を消すと次のようになり、

結局 10 個の区画、つまり 10 人で分けられることになります。

雪が降って区画の境界が見えなくなる前に分配を終えなくてはなりません。あなたの仕事は果樹園の地図をもとに分配する区画の数を決めることです。

果樹園の地図を読み込み、分配を受けられる血縁者の人数を出力するプログラムを作成してください。

Input

複数のデータセットが与えられます。各データセットは空白で区切られた H, W (H, W ≤ 100) を含む行から始まり、続いて H × W の文字からなる H 行の文字列が与えられます。この文字列には、リンゴを表す '@'、カキを表す '#'、ミカンを表す '*'、の 3 文字しか現れません。

入力はゼロが2つの行で終わります。データセットの数は 20 を超えません。

Output

各データセットごとに、分配を受ける人数を1行に出力してください。

Sample Input

10 10
####*****@
@#@@@@#*#*
@##***@@@*
#****#*@**
##@*#@@*##
*@@@@*@@@#
***#@*@##*
*@@@*@@##@
*@*#*@##**
@****#@@#@
0 0

Output for the Sample Input

33

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;int m, n;
char garden[105][105];
int d[4][2] = {{0, -1},{1, 0},{0, 1},{-1, 0},
};void dfs(int x, int y, char c)
{if(garden[x][y] == c){garden[x][y] = ' ';for (int i = 0; i < 4; i++){int nx = x + d[i][1];int ny = y + d[i][0];if (0 <= nx && nx < n && 0 <= ny && ny < m && garden[nx][ny] != ' ')dfs(nx, ny, c);}}
}int main(void)
{while(~scanf("%d%d", &n, &m) && m+n){getchar();memset(garden, 0, sizeof(garden));for (int i = 0; i < n; i++){for (int j = 0; j < m; j++)scanf("%c", &garden[i][j]);getchar();}int sum = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (garden[i][j] != ' '){dfs(i, j, garden[i][j]);sum++;}}}cout << sum << endl;}return 0;
}

DFS:图的联通块 AOJ-0118 Property Distribution相关推荐

  1. AOJ 0118: Property Distribution (简单DFS)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0118 题意:给定一个矩阵,同类字符相连的为一个块,问总共有几个块. 输入 ...

  2. AOJ0118 Property Distribution【DFS】

    タナカ氏が HW アールの果樹園を残して亡くなりました.果樹園は東西南北方向に H × W の区画に分けられ.区画ごとにリンゴ.カキ.ミカンが植えられています.タナカ氏はこんな遺言を残していました. ...

  3. DFS求连通块数目(深搜)

    DFS求连通块数目 这里认为,连通块是包括斜对角线的路径连通的块. 测试数据 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 计算通过@相连的连通块的个数 测试输出: 2 样例代码 ...

  4. [蓝桥杯2018初赛]全球变暖-dfs,bfs,连通块

    解题思路: bfs:遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量cnt,以及被淹没陆地的数量bound,若cnt == bound表示完整淹没的一个岛屿 dfs:将连通块全部标记,如 ...

  5. HDU 2952 Counting Sheep (DFS找联通块)

    题目链接:请戳这里.   题目大意及思路:读懂题意就好了,就是DFS找联通块. 没什么好说的,见代码吧. #include<cstdio> #include<cstring> ...

  6. 通信网络设计(最小生成树+图的联通)

    题目详情: 假设你是电信工程师,需要为村庄间架设通信网络,使任何两个村庄间都可以实现通信连通(但不一定有直接的快速线路相连,只要互相间接有线路连通即可).现有规划信息数据,列出了所有可能架设线路的两个 ...

  7. UVa572 Oil Deposits DFS求连通块

    技巧:遍历8个方向 for(int dr = -1; dr <= 1; dr++)for(int dc = -1; dc <= 1; dc++)if(dr != 0 || dc != 0) ...

  8. [uva]AncientMessages象形文字识别 (dfs求连通块)

    非常有趣的一道题目,大意是给你六种符号的16进制文本,让你转化成二进制并识别出来 代码实现上参考了//http://blog.csdn.net/u012139398/article/details/3 ...

  9. 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)

    题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域 ...

最新文章

  1. 24/4毕业设计小记
  2. CharSequence和String的区别
  3. 如何在mysql查找效率慢的SQL语句
  4. JAVASCRIPT发展历程
  5. [支持库] 易语言超文本浏览框支持库3.1#51
  6. MySql语句查询优化
  7. php 打包下载网络图片,PHP实现图片批量打包下载功能
  8. 51nod 1101 换零钱 【完全背包变形/无限件可取】
  9. 关于计算机航天生物的想像作文,未来的航天员想象作文
  10. SpringMVC 整合Redis
  11. vb.net html元素,vb.net 教程 12-3 HtmlElement类 1
  12. PxCook像素大厨
  13. 【mysql】加密与解密函数
  14. OA系统的功能和作用是什么(OA系统百科)
  15. DbGate:一款免费的智能数据库管理工具
  16. 将监控摄像头的监控视频转发到互联网,实现远程视频监控
  17. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)
  18. 台积电股价突破万亿大关 创下台股历史新高
  19. numpy.corrcoef 计算相关系数
  20. Java入门 第十二节(一) API

热门文章

  1. 简单几行代码,写一个百度广告屏蔽插件,爽到爆
  2. [LeetCode]题解(python):108-Convert Sorted Array to Binary Search Tree
  3. 学习C#要养成的好习惯
  4. 什么是JAVA内容仓库(Java Content Repository)(3)
  5. SAP有用的知识(持续更新)
  6. 学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...
  7. java内部类 缺点_Java中的内部类及其优势
  8. 区块链简史:解读这场技术革命的前世今生
  9. python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码
  10. es6 generator_让我们探索一下ES6 Generators