ACM Property Distribution(挑战程序设计竞赛)
来源:互联网 发布:ultraedit软件下载 编辑:程序博客网 时间:2024/06/05 23:04
Property Distribution
Time Limit: 1000ms
Memory Limit: 65536KB
This problem will be judged on Aizu. Original ID: 011864-bit integer IO format: %lld Java class name: Main
Prev
Submit Status Statistics Discuss
NextProperty Distribution
タナカ氏が HW アールの果樹園を残して亡くなりました。果樹園は東西南北方向に H×W の区画に分けられ、区画ごとにリンゴ、カキ、ミカンが植えられています。タナカ氏はこんな遺言を残していました。
果樹園は区画単位でできるだけ多くの血縁者に分けること。ただし、ある区画の東西南北どれかの方向にとなりあう区画に同じ種類の果物が植えられていた場合は、区画の境界が分からないのでそれらは 1 つの大きな区画として扱うこと。
例えば次のような 3x10 の区画であれば(リはリンゴ、カはカキ、ミはミカンを表す)
同じ樹がある区画の間の境界を消すと次のようになり、
結局 10 個の区画、つまり 10 人で分けられることになります。 雪が降って区画の境界が見えなくなる前に分配を終えなくてはなりません。あなたの仕事は果樹園の地図を もとに分配する区画の数を決めることです。ということで、果樹園の地図を読み込み、分配を受けら れる血縁者の人数を出力して終了するプログラムを作成してください。ただし、果樹園の地図は W 文字×H 行の文字列として与えられます。この文字列には、リンゴを表す@、カキを表す#、ミカンを表す*、の 3 文字しか使われていません。
Input
複数のデータセットが与えられます。各データセットは空白で区切られたH Wを含む行から始まり、続いてH × Wの文字が与えられます。入力はゼロが2つの行で終わります。
H, W は100以下です。
Output
各データセットごとに、分配を受ける人数を1行に出力してください。
Sample Input
10 10####*****@@#@@@@#*#*@##***@@@*#****#*@**##@*#@@*##*@@@@*@@@#***#@*@##**@@@*@@##@*@*#*@##**@****#@@#@0 0
Output for the Sample Input
33
Source
PCK 2005
题目大意:果园里有三种类型的果树,分别是@,#,*,上下左右相同类型的果树算在一个区域
求果园里共有多少个区域,W<=100,H<=100,W=0并且H=0输入结束.
解题思路:
深度优先搜索
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define MAX_W 101char map[MAX_W][MAX_W];int w,h;bool vis[MAX_W][MAX_W];int dx[]={1,-1,0,0};int dy[]={0,0,1,-1};void dfs(int x,int y){vis[y][x]=true;for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(nx>=0 && nx<w && ny>=0 && ny<h && !vis[ny][nx] && map[y][x]==map[ny][nx])dfs(nx,ny);}}int main(){scanf("%d%d",&h,&w);while(w!=0 || h!=0){for(int i=0;i<h;i++){scanf("%s",map[i]);}memset(vis,0,sizeof(vis));int cnt=0;for(int i=0;i<h;i++)for(int j=0;j<w;j++)if(!vis[i][j]){dfs(j,i);cnt++;}printf("%d\n",cnt);scanf("%d%d",&h,&w);}return 0;}
0 0
- ACM Property Distribution(挑战程序设计竞赛)
- [挑战程序设计竞赛] AOJ 0118 - Property Distribution
- ACM Ball(挑战程序设计竞赛)
- ACM Hopscotch(挑战程序设计竞赛)
- ACM Osenbei(挑战程序设计竞赛)
- ACM Packets(挑战程序设计竞赛)
- ACM Red and Black(挑战程序设计竞赛)
- ACM Curling 2.0(挑战程序设计竞赛)
- ACM Meteor Shower(挑战程序设计竞赛)
- ACM Seven Puzzle(挑战程序设计竞赛)
- ACM Smallest Difference(挑战程序设计竞赛)
- ACM Backward Digit Sums(挑战程序设计竞赛)
- ACM Cleaning Shifts(挑战程序设计竞赛)
- ACM Radar Installation(挑战程序设计竞赛)
- ACM Stall Reservations(挑战程序设计竞赛)
- ACM Yogurt factory(挑战程序设计竞赛)
- ACM挑战程序设计竞赛1.1抽签
- 《挑战程序设计竞赛》 读后感
- DSP学习总结——Boot引导模式
- linq 语法lambpa语法总结
- 使用具有权威说服力的实例辨明C++中的malloc与new
- ZOJ Problem Set - 2297 Survival 【状压dp】
- 每天一点儿Java--ComboBox
- ACM Property Distribution(挑战程序设计竞赛)
- js中split用法
- 页面弹出动画,类似抽屉效果
- 离散余弦变换(DCT)
- 机房收费系统之日结账单和周结账单
- Eclipse开发设置
- [Android xml]自定义控件的属性-declare-styleable
- js中join用法
- Maven 修改本地存储库位置