uva 784 Maze Exploration 染色 搜索水题 DFS

染色问题,其实就是看看图上某一点能扩散多少。

用DFS解决,因为BFS不是很熟 =-=。。。以后要多练。

提交后32ms,优化了一下,在递归前进行判定,优化到22ms,不是优化的很好。。。

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
char maze[31][81];

void dfs(int x, int y) {
	maze[x][y] = '#';
	if (maze[x - 1][y] == ' ')
		dfs(x - 1, y);
	if (maze[x][y - 1] == ' ')
		dfs(x, y - 1);
	if (maze[x + 1][y] == ' ')
		dfs(x + 1, y);
	if (maze[x][y + 1] == ' ')
		dfs(x, y + 1);
}


int main() {
	int n;
//	freopen("in", "r", stdin);
	scanf("%d", &n);
	gets(maze[0]);
	while (n--) {
		int i = 0;
		while (gets(maze[i]) && maze[i][0] != '_') {
			i++;
		}//input
		bool flag = true;
		for (int k = 0; k < i; k++)
			for (int j = 0; flag && j < strlen(maze[k]); j++)
				if (maze[k][j] == '*') {
					maze[k][j] = '#';
					dfs(k, j);
//					printf("%d %d
", k, j);
					flag = false;
				}
//		printf("%d %d
", i, flag);
		for (int k = 0; k <= i; k++)
			puts(maze[k]);
	}//while
}




原文地址:https://www.cnblogs.com/java20130723/p/3212253.html