题目大意:
求图中@连通块的个数,只要两个@相邻就算它们是连通的(斜方向的也算相邻)
#include <stdio.h> #include <string.h> char map[110][110]; int vis[110][110]; int n, m, ans; int dir[8][2] = { {0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1} }; void dfs(int a,int b) { int i, j; vis[a][b] = 1; if (a > m || b > n || a < 1 || b < 1)return; for (int k = 0; k < 8; k++) { int x = a + dir[k][0]; int y = b + dir[k][1]; if (x < 1 || y<1 || x>m || y>n)continue; if (map[x][y] == ‘@‘&&vis[x][y] == 0) { dfs(x, y); } } } int main() { int i, j; while (scanf("%d%d", &m, &n)!= EOF, n || m) { getchar(); for (i = 1; i <= m; i++) { scanf("%s", map[i]+1); } memset(vis, 0, sizeof(vis)); ans = 0; for (i = 1; i <=m; i++) { for (j = 1; j <=n; j++) { if (map[i][j] == ‘@‘&&vis[i][j] == 0) { ans++; dfs(i, j); } } } printf("%d\n", ans); } return 0; }
2018-03-31