572 - Oil Deposits

题目:572 - Oil Deposits


题目大意:就是求大块油田的个数。大块的油田指的是(水平,垂直,或对角相邻的油田组成的)。

#include<stdio.h>
#include<string.h>

const int N = 105;
int m, n;
int s[N][N], visit[N][N];

void dfs(int x, int y) {

	if(!s[x][y] || visit[x][y])
		return ;
	visit[x][y] = 1;
	dfs(x - 1, y - 1);
	dfs(x - 1, y);
	dfs(x - 1, y + 1);
	dfs(x, y - 1);
	dfs(x, y + 1);
	dfs(x + 1, y - 1);
	dfs(x + 1, y);
	dfs(x + 1, y + 1);

}

int main() {

	int i, j;
	char ch;
	while(scanf("%d%d%*c", &m, &n) , m && n) {
		
		memset(s, 0, sizeof(s));
		memset(visit, 0, sizeof(visit));
		for( i = 1; i <= m ; i++) {

			for( j = 1; j <= n; j++) {
				
				scanf("%c", &ch);
				if(ch == '@')
					s[i][j] = 1;
			}
			scanf("%*c");
			
		}
		int count = 0;
		for(i = 1; i <= m; i++)
			for(j = 1; j <= n; j++) {

				if(s[i][j] && !visit[i][j]) {
					
					count++;
					dfs(i, j);
				}
			}
		printf("%d\n", count);
	}
	return 0;
}


解题思路:dfs,深度优先遍历。



你可能感兴趣的:(572 - Oil Deposits)