zoukankan      html  css  js  c++  java
  • [HDU 1241]Oil Deposits

    也是很简单的DFS水题,就跟求有多少连通块差不多。(只有上下左右四个方向有联通才是连通块)

    #include<cstdio>
    #include <cstring>
    using namespace std;
    int m, n,cnt = 0;
    char A[101][101];
    int vis[101][101];
    
    void dfs(int i, int j)
    {
        if(i < 0|| j < 0|| i >= m|| j >= n || vis[i][j] || A[i][j] != '@')
            return;
        else
        {
            //这里当然也可以开一个dic数组用for来遍历,但是这个是我早期代码,只是做个归档故不再优化。
            vis[i][j] = 1;
            dfs(i-1, j-1);
            dfs(i-1, j);
            dfs(i-1, j+1);
            dfs(i, j-1);
            dfs(i, j+1);
            dfs(i+1, j-1);
            dfs(i+1, j);
            dfs(i+1, j+1);//dfs的精髓!
            //这道题就不需要重置了,因为油田不能重复出现
        }
    
    }
    
    
    int main()
    {
        while(~scanf("%d%d", &m, &n) && (m+n))
        {
            cnt = 0;
            memset(A, 0, sizeof(A));
            memset(vis, 0, sizeof(vis));
            for(int i = 0; i < m; ++i)
                scanf("%s", A[i]);
    
            for(int i = 0; i < m; ++i)
                for(int j = 0; j < n; ++j)
                    if(!vis[i][j] && A[i][j] == '@')
                        dfs(i, j),cnt++;
            printf("%d\n", cnt);
        }
    }
  • 相关阅读:
    转:浅谈Linux的内存管理机制
    (转)Redis
    检测socket链接是否断开
    linux C 中的volatile使用
    LINUX 下 ipv6 socket 编程
    linux signal 列表
    Linux下异常信号
    linux signal
    转: 关于Linux常用的二进制文件分析方法
    IOI2020 题解
  • 原文地址:https://www.cnblogs.com/Vikyanite/p/11382386.html
Copyright © 2011-2022 走看看