HDOJ 1241 Oil Deposits

来源:互联网 发布:下载免费打电话软件 编辑:程序博客网 时间:2024/06/07 01:05

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241


题目大意:有一块n×m的土地,‘@’为油田,‘*’为空地,油田周围8个方向如果也有油田,那么算作一块油田。问这块土地上有几块油田。


题目思路:简单的搜索,从‘@’开始,把经过的‘@’周围8个方向的‘@’都搜索到,算作一块,最后统计搜索的次数。


AC代码:

//  HDOJ//  1241.cpp/*    ID: Firwaless    LANG: C++    TASK: Oil Deposits*/#include <cstdio>#include <cstring>const int dir[8][2] = {0, 1, 0, -1, 1, 0, -1, 0, 1, 1, 1, -1, -1, 1, -1, -1};char g[102][102];void dfs(int x, int y){    int i, a, b;        g[x][y] = '*';    for (i = 0; i < 8; i++)    {        a = x + dir[i][0];        b = y + dir[i][1];        if (g[a][b] == '@')        {            dfs(a, b);        }    }}int main(){    int i, j, n, m, ans;        while (scanf("%d%d%*c", &n, &m), (n || m))    {        ans = 0;        memset(g, '*', sizeof(g));        for (i = 1; i <= n; i++)        {            for (j = 1; j <= m; j++)            {                g[i][j] = getchar();            }            getchar();        }        for (i = 1; i <= n; i++)        {            for (j = 1; j <= m; j++)            {                if (g[i][j] == '@')                {                    dfs(i, j);                    ans++;                }            }        }        printf("%d\n", ans);    }    return 0;}


0 0
原创粉丝点击