zoukankan      html  css  js  c++  java
  • UVA572

    https://www.luogu.com.cn/problem/UVA572#submit


    // 题意:输入一个字符矩阵,统计字符@组成多少个四连块

    // 可以用floodfill方法, 这边设置了两个数组,pic是原始图像,不去更改他。 idx为dfs用的标记图像,

    例如:

    原始图像:

    ****@
    *@@*@
    *@**@
    @@@*@
    @@**@

    标记后图像:
    00001
    02201
    02001
    22201
    22001


    #include <cstdio>

    #include <cstring>

    const int maxn=100+5;
    int m,n;
    char pic[maxn][maxn];
    int idx[maxn][maxn];

    void dfs(int r, int c, int cnt)
    {
        idx[r][c]=cnt;
        for(int i=-1;i<=1;i++)
            for(int j=-1;j<=1;j++)
            {
                if(i==0&&j==0) continue;
                int nr=r+i;
                int nc=c+j;
                if(nr>=0 && nr<m && nc>=0 && nc<n && idx[nr][nc]==0 && pic[nr][nc]=='@')
                    dfs(nr, nc, cnt);
            }

    }
    int main()
    {
        while(scanf("%d %d", &m, &n)==2 && m && n)
        {
            for(int i = 0; i < m; i++) scanf("%s", pic[i]);
            memset(idx, 0, sizeof(idx));
            int cnt=0;
            for(int i=0;i<m;i++)
                for(int j=0;j<n;j++)
                {
                    if(idx[i][j]==0 && pic[i][j] == '@')
                    {
                        dfs(i,j, ++cnt);
                    }
                }
    //打印idx图像
    //        for(int i = 0; i < m; i++)
    //        {
    //            for(int j=0;j<n;j++)
    //                printf("%d", idx[i][j]);
    //            printf("
    ");
    //        }

            printf("%d
    ", cnt);
        }
        return 0;
    }

  • 相关阅读:
    Spark基础
    flink杂记
    算法
    算法小结
    Java内存模型
    LeetCode---Backtracking && DP
    LeetCode---Sort && Segment Tree && Greedy
    LeetCode---Depth-first && Breadth-first
    LeetCode---Bit Manipulation && Design
    MD5
  • 原文地址:https://www.cnblogs.com/cute/p/15040230.html
Copyright © 2011-2022 走看看