0118 - Property Distribution
#include <iostream> #include <string> using namespace std; int H, W; string field[100]; void dfs(int i, int j, char fruit) { field[i][j]='.'; if (j+1<W && field[i][j+1]==fruit) dfs(i,j+1,fruit); if (i+1<H && field[i+1][j]==fruit) dfs(i+1,j,fruit); if (0<=j-1 && field[i][j-1]==fruit) dfs(i,j-1,fruit); if (0<=i-1 && field[i-1][j]==fruit) dfs(i-1,j,fruit); } void Slove(void) { int answer=0; for (int i=0; i<H; ++i) cin >> field[i]; for (int i=0; i<H; ++i) for (int j=0; j<W; ++j) if (field[i][j] != '.') { ++answer; dfs(i,j,field[i][j]); } cout << answer << endl; } int main(void) { while ( cin >> H >> W && (H || W) ) Slove(); return 0; }
深さ優先探索を用いるだけ。