• HDU 1241 Oil Deposits --- 入门DFS


      HDU 1241

      题目大意:给定一块油田,求其连通块的数目。上下左右斜对角相邻的@属于同一个连通块。

      解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量。

    /* HDU 1241 Oil Deposits --- 入门DFS */
    #include <cstdio>
    
    int m, n; //n行m列
    char mapp[105][105];
    
    /* 将和i,j同处于一个连通块的字符标记出来 */
    void dfs(int i, int j){
        if (i < 0 || j < 0 || i >= n || j >= m || mapp[i][j] != '@')
            return;
        //此处直接更改为*,省去了一个标记数组,当然也可以用一个标记数组visit记录访问状态
        mapp[i][j] = '*'; 
        
        for (int dr = -1; dr <= 1; dr++)   //递归遍历8个方向
            for (int dc = -1; dc <= 1; dc++)
            {
                if (dr != 0 || dc != 0) 
                    dfs(i + dr, j + dc);
            }
    }
    
    int main()
    {
        int cnt;
    
        while (scanf("%d%d", &n, &m) && n != 0){
            getchar();
            for (int i = 0; i < n; ++i)
            {
                gets(mapp[i]);
            }
    
            cnt = 0;
            for (int i = 0; i < n; ++i)
            {
                for (int j = 0; j < m; ++j)
                {
                    if (mapp[i][j] == '@'){
                        ++cnt;
                        dfs(i, j); //调用一次就是一个连通块全部标记成*
                    }
                }
            }
            printf("%d
    ", cnt);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    linux中断子系统
    注释规范
    linux下C获取文件的大小
    oracle 11g 修改内存示例
    联想system sr650安装windows
    iphone 手机音乐制作
    canon dpp 编辑相机raw软件
    浪潮nf5270m5 安装2012
    三种刻录工具及用法
    centos7.5 连接存储配置iscsi
  • 原文地址:https://www.cnblogs.com/tommychok/p/5043635.html
Copyright © 2020-2023  润新知