AOJ0118 Property Distribution【DFS】
タナカ氏が 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
问题链接:AOJ0118 Property Distribution
题意简述:财产分割问题。H×W的区间,种有苹果(@)、柿子(#)和桔子(※)的树。问同类水果树连片的共有多少片?
问题分析:类似于联通图问题,将联通的归为1片,数一下总共有多少片即可。可以使用DFS实现。
程序说明:
已经数过的或被合并为一片的标为空格(' ')。
用递归函数实现。
需要注意不要越过边界。
参考链接:HDU1241 POJ1562 UVa572 UVALive5317 Oil Deposits
题记:(略)
AC的C++程序如下:
/* AOJ0118 Property Distribution */#include <iostream>
#include <cstdio>using namespace std;#define DIRECTSIZE 4
struct _direct {int drow;int dcol;
} direct[DIRECTSIZE] ={{0, -1}, {0, 1}, {-1, 0}, {1, 0}};const int N = 100;
string grid[N];
int h, w, ans;void dfs(int row, int col, char c)
{if(grid[row][col] == c) {grid[row][col] = ' ';for(int i=0; i<DIRECTSIZE; i++) {int nextrow = row + direct[i].drow;int nextcol = col + direct[i].dcol;if(0 <= nextrow && nextrow < h && 0 <= nextcol && nextcol < w)if(grid[nextrow][nextcol] != ' ')dfs(nextrow, nextcol, c);}}
}int main()
{ while(cin >> h >> w && (h || w)) {getchar();for(int i=0; i<h; i++)getline(cin, grid[i]);ans = 0;for(int i=0; i<h; i++)for(int j=0; j<w; j++) {char c = grid[i][j];if(c != ' ') {ans++;dfs(i, j, c);}}cout << ans << endl;}return 0;
}
AOJ0118 Property Distribution【DFS】相关推荐
- Bailian2815 城堡问题【DFS】
2815:城堡问题 总时间限制: 1000ms 内存限制: 65536kB 描述 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ...
- Bailian2816 红与黑【DFS】
2816:红与黑 总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动.请写一 ...
- NUC1158 Lake Counting【DFS】
Lake Counting 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 Due to recent rains, water has pooled ...
- NUC1399 Sum It Up【DFS】
Sum It Up 时间限制: 1000ms 内存限制: 65535KB 通过次数: 1总提交次数: 1 问题描述 Given a specified total t and a list of n ...
- DFS:图的联通块 AOJ-0118 Property Distribution
这道题类似于联通图问题,将联通的归成一个,数一下总共有几个即可. 因为题目告诉不会有空格,所以排除标记用空格表示即可. Property Distribution Aizu - 0118 タナカ氏が ...
- HDU1181 变形课【DFS】(废除)
新题解参见:HDU1181 变形课[DFS+关系闭包+bitset] 变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13107 ...
- 【DFS】巧妙取量的倒油问题
题目描述 [题目描述] 有三个容器,容量分别为 a,b,c(a> b > c ),一开始a装满油,现在问是否只靠abc三个容器量出k升油.如果能就输出"yes",并且 ...
- [kuangbin]专题三 Dancing Links Squiggly Sudoku HDU - 4069【DFS】【精确覆盖】
[题目描述] Today we play a squiggly sudoku, The objective is to fill a 9*9 grid with digits so that each ...
- 【DFS】不撞南墙不回头—深度优先搜索算法[Deep First Search]
今天上午听到,那个非常6+1的李咏先生因癌症去世 DFS算法的基本模型 深度下,不撞南墙不回头,就是一直往后找,知道没有路了,向后返回. 想起一首民谣,<可能否>--木小雅 https:/ ...
最新文章
- YoutubeNet的数据答疑
- 同为Java开发:有了这些Java项目经历,面大厂稳了!
- angularJs 前端的页面分解与组装
- 如何构建Android MVVM 应用框架
- 第二章作业-第3题-万世想
- SSH2+Daoz项目中的分页查询
- 1.2 torch_数据预处理
- 电脑怎么python转行_零基础转行DA系列|一周Python for Data Science入门
- linux 常用命令01
- f2 柱状图滚动 钉钉小程序_详解钉钉小程序组件之自定义模态框(弹窗封装实现)...
- \r,\n,\r\n
- 基于C#的AE+IDL二次桌面端程序开发
- 欧几里得gcd/extend_gcd
- corpus academic writing
- python对编写神经网络作用_神经网络(BP)算法Python实现及应用
- vSAN其实很简单-5分钟学会如何向VMware报修故障(内含福利)
- 【动态规划】01背包问题:购物袋
- IDC:阿里云安全能力和IaaS市场份额双项领先
- linux recv返回值,Nginx 的recv() failed 错误解决一例
- JavaScript模块化编程(总结)
热门文章
- Kubernetes系列之理解K8s Service的几种模式
- Adobe AIR教程:面向iOS设备的原生扩展
- php mysql合同跟踪,使用TCP协议进行路由跟踪
- 力扣-图解算法数据结构-剑指 Offer 05. 替换空格
- php 提取字的首字母,PHP提取中文首字母_php技巧
- Mysql中导入和导出数据库
- LeetCode 144. 二叉树的前序遍历(递归)(迭代)(颜色标记法)
- c++之string类详解
- ZT: Delphi编程规范1.0.0.0 (yckxzjj )
- anaconda tensorflow import PIL 报错的解决方法