水
题意:在H * W的矩形果园里有苹果、梨、蜜柑三种果树, 相邻(上下左右)的同种果树属于同一个区域,给出果园的果树分布,求总共有多少个区域。
(原题的样图中苹果为リ,梨为カ,蜜柑为ミ, 图中共10个区域)
输入:多组数据,每组数据第一行为两个整数H、W(H <= 100, W <= 100), H =0 且 W = 0代表输入结束。以下H行W列表示果园的果树分布, 苹果是@,梨是#, 蜜柑是*。
输出:对于每组数据,输出其区域的个数。
#include <stdio.h>
const int MAX_H = 110, MAX_W = 110;
int H, W;
char field[MAX_H][MAX_W];
int dh[4] = {1, 0, -1, 0};
int dw[4] = {0, 1, 0, -1};
bool infield(int h, int w){
return (0<=h && h<H && 0<=w && w<W);
}
void dfs(int h, int w){
char fruits = field[h][w];
field[h][w] = '.';
for(int i=0; i<4; i++){
int nh = h+dh[i];
int nw = w+dw[i];
if(infield(nh, nw) && field[nh][nw]==fruits)
dfs(nh, nw);
}
}
void solve(){
int ans = 0;
for(int i=0; i<H; i++){
for(int j=0; j<W; j++){
if(field[i][j] != '.'){
dfs(i, j);
ans++;
}
}
}
printf("%d\n", ans);
}
int main(){
while(scanf("%d%d", &H, &W), H|W){
for(int i=0; i<H; i++)
scanf("%s", field[i]);
solve();
}
return 0;
}