1. 程式人生 > >UVa 572 - Oil Deposits 【DFS】聯通塊問題

UVa 572 - Oil Deposits 【DFS】聯通塊問題

傳送門 nbsp pro oid sizeof ems amp ++ .net

題目鏈接

題目大意:

求圖中@連通塊的個數,只要兩個@相鄰就算它們是連通的(斜方向的也算相鄰)

#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】聯通塊問題