標籤:printf scanf string \n size class map body getchar
題目連結
題目大意:
求圖中@連通塊的個數,只要兩個@相鄰就算它們是連通的(斜方向的也算相鄰)
#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
UVa 572 - Oil Deposits 【DFS】聯通塊問題