AOJ0118 Property Distribution【DFS】
来源:互联网 发布:双色球开奖历史数据库 编辑:程序博客网 时间:2024/06/06 05:14
タナカ氏が 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 4struct _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】
- AOJ0118 Property Distribution(DFS)
- AOJ0118 Property Distribution 裸dfs
- aoj0118 Property Distribution(dfs)
- aoj0118 Property Distribution 暴力dfs
- AOJ0118——Property Distribution(DFS)
- AOJ0118 Property Distribution 搜索
- aoj0118-Property Distribution
- 【暑假复习】【搜索】AOJ0118:Property Distribution
- AOj0118 dfs
- AOJ 0118 Property Distribution (DFS)
- [DFS] AOJ 0118 Property Distribution
- Aoj 0118 Property Distribution【dfs】
- AOJ 0118 Property Distribution 【DFS】
- AOJ 0118 Property Distribution (dfs)
- AOJ 0118: Property Distribution (简单DFS)
- AOJ0118(DFS)
- AOJ 0033 ball+AOH 0118Property Distribution (DFS)
- RN-Init
- JAVA高级工程师课程笔记整理——(八)tomcat与九大内置对象
- selenium键盘操作
- java中的修饰符
- mysql中的rand函数
- AOJ0118 Property Distribution【DFS】
- 配置集群ssh免密码登录
- 【HDU1176】免费馅饼
- 杨辉三角具体实现和图解
- 十分钟搞清字符集和字符编码
- PyTorch在64位Windows下的编译
- Gradle使用的简单了解
- Web用户登录---验证码的设计与实现
- items2 solaried配置