UVA - 572 Oil Deposits

来源:互联网 发布:天津大学网络教学 编辑:程序博客网 时间:2024/06/11 11:33

题目大意:找出有多少块 @,八个方向相邻就算相连。

解题思路:用一个数组 num 标记该 @ 是否被查找过,若有则返回,八个方向递归查找相邻的 @。统计进入了几次 dfs

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>char map[150][150];int num[150][150];int cnt, m, n;void dfs(int r, int c, int cn) {    if (r < 0 || r >= m || c < 0 || c >= n) return;    if (map[r][c] != '@' || num[r][c]) return;    num[r][c] = cn;    dfs(r-1, c-1, cn);    dfs(r-1, c, cn);    dfs(r-1, c+1, cn);    dfs(r, c-1, cn);    dfs(r, c, cn);    dfs(r, c+1, cn);    dfs(r+1, c-1, cn);    dfs(r+1, c, cn);    dfs(r+1, c+1, cn);}int main() {    while (scanf("%d%d", &m, &n) != EOF && m) {        cnt = 0;        memset(num, 0, sizeof(num));        for (int i = 0; i < m; i++)            scanf("%s", map[i]);        for (int i = 0; i < m; i++)            for (int j = 0; j < n; j++)                if (map[i][j] == '@' && !num[i][j])                    dfs(i, j, ++cnt);        printf("%d\n", cnt);    }}

在家水了一周多,回校第一题。参考小紫。

0 0
原创粉丝点击