AOJ 0118

DFS简单题

#include <iostream>
#define MAX_N 101
using namespace std;

int N, M;
char filed[MAX_N][MAX_N];
int path[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
int res;

void dfs(int rx, int ry, char flag)
{
	filed[rx][ry] = '.';
	for(int i = 0; i < 4; i++){
		int dx = rx + path[i][0];
		int dy = ry + path[i][1];
		
		if(dx >= 0 && dy >= 0 && dx < M && dy < N && filed[dx][dy] == flag){
			dfs(dx, dy, flag);
		}
	}
} 

void solve()
{
	for(int i = 0; i < M; i++){
		for(int j = 0; j < N; j++){
			if(filed[i][j] != '.'){
				dfs(i, j, filed[i][j]);
				res++;
			}
		}
	}
	cout << res << endl;
}

int main()
{
	while(cin >> M >> N, N > 0){
		res = 0;
		for(int i = 0; i < M; i++){
			for(int j = 0; j < N; j++){
				cin >> filed[i][j];
			}
		}	
		solve();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/adorkable_thief/article/details/89222272