题目大意:
求图中最大‘.‘的连通块,输出该最大连通块的块数
#include <cstdio> int n, m, res; int dir[4][2] = { 1,0,0,1,-1,0,0,-1 }; char map[30][30]; void dfs(int i, int j) { map[i][j] = ‘#‘; res++; for (int k = 0; k < 4; k++) { int x = i + dir[k][0]; int y = j + dir[k][1]; if (x < 0 || y < 0 || x >= n || y >= m)continue; if (map[x][y] == ‘.‘)dfs(x, y); //由于dfs运用递归延伸出很多条路径,res的最终值为所达路径的最大联通块数量 //但是为什么不用一个max数来保存当前的最大连通快的数值,res++就能做到这样的效果,即,为什么res++就能做到最终输出的res是 } //最大连通块的数量,是因为最大连通块的路径运行的时间最久吗,所以最后res的值为要求的值 } int main() { int i, j, x, y; while (scanf("%d%d", &m, &n) != EOF, n || m) { for (i = 0; i < n; i++)scanf("%s", map[i]); for(i=0;i<n;i++) for (j = 0; j < m; j++) { if (map[i][j] == ‘@‘) { x = i; y = j; } } res = 0; dfs(x, y); printf("%d\n", res); } return 0; }
2018-03-31