zoukankan      html  css  js  c++  java
  • CodeForces 616C The Labyrinth

    先预处理出所有连通块,对于每一个*,看他四周的连通块即可

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1000+10;
    char s[maxn][maxn];
    int Map[maxn][maxn];
    int n,m;
    int dir[4][2];
    int Belong[maxn*maxn];//每个点属于哪个联通快
    int tot[maxn*maxn];//每个联通快有几个点
    int Block;
    int TT;
    int tmp[10];
    int RT[maxn*maxn];
    
    
    
    void DFS(int x,int y)
    {
        Map[x][y]=Block; TT++;
        for(int i=0;i<4;i++)
        {
            int NewX=x+dir[i][0];
            int NewY=y+dir[i][1];
            if(NewX>=0&&NewX<=n-1)
                if(NewY>=0&&NewY<=m-1)
                    if(Map[NewX][NewY]==0)
                        DFS(NewX,NewY);
        }
    }
    
    int P(int x,int y)
    {
        if(x>=0&&x<=n-1)
            if(y>=0&&y<=m-1)
                return 1;
        return 0;
    }
    
    int main()
    {
        dir[0][0]=1;dir[0][1]=0;
        dir[1][0]=0;dir[1][1]=1;
        dir[2][0]=-1;dir[2][1]=0;
        dir[3][0]=0;dir[3][1]=-1;
    
        scanf("%d%d",&n,&m);
        memset(Map,0,sizeof Map);
        for(int i=0;i<n;i++) scanf("%s",s[i]);
        Block=1;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(s[i][j]=='*') Map[i][j]=-1;
                else Map[i][j]=0;
            }
    
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(Map[i][j]==0)
                {
                    TT=0;
                    DFS(i,j);
                    tot[Block]=TT;
                    Block++;
                }
            }
    
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(s[i][j]=='*')
                {
                    int ans=0;
                    int tmp[10],xx=0;
                    if(P(i-1,j)) tmp[xx++]=Map[i-1][j];
                    if(P(i+1,j)) tmp[xx++]=Map[i+1][j];
                    if(P(i,j-1)) tmp[xx++]=Map[i][j-1];
                    if(P(i,j+1)) tmp[xx++]=Map[i][j+1];
                    for(int r=0;r<xx;r++)
                    {
                        int fail=0;
                        for(int d=0;d<r;d++) if(tmp[r]==tmp[d]) fail=1;
                        if(!fail) ans=ans+tot[tmp[r]];
                    }
                    ans++;
                    ans=ans%10;
                    s[i][j]=ans+'0';
                }
            }
        }
    
        for(int i=0;i<n;i++) printf("%s
    ",s[i]);
        return 0;
    }
  • 相关阅读:
    CSRF和XSS的区别
    xss攻击与防范
    GAN基础
    (转载)深度学习数据集
    Python问题解决记录
    Spark Mllib源码分析
    Spark MLlib框架详解
    Spark Structured Streaming框架(5)之进程管理
    Spark Structured Streaming框架(4)之窗口管理详解
    Spark Structured Streaming框架(3)之数据输出源详解
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5130240.html
Copyright © 2011-2022 走看看