1 条题解

  • 2
    @ 2019-07-15 23:41:17
    
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    bool a[9999][9999];
    int ans=0;
    
    struct shu
    {
        int x;//行 
        int y;//列 
    };
    
    int dx[5]={0,-1,0,1,0};//上右下左
    int dy[5]={0,0,1,0,-1};
     
    
    void bfs(int i,int j)
    {
        ans++;
        shu q[99999];//队列
         
        int front=0,rear=1;
        q[1].x=i;
        q[1].y=j; 
        
        a[i][j]=0;
        
        do
        {
            front++;//出列 —> 寻找子节点 
            for(int i=1;i<=4;i++)
            {
                int X=q[front].x+dx[i];
                int Y=q[front].y+dy[i];
                if(X>0 && X<=n && Y>0 && Y<=m && a[X][Y]==1)
                {
                    rear++;
                    q[rear].x=X;
                    q[rear].y=Y;
                    a[X][Y]=0;
                }
            }
        }while(front<rear);
        
    }
    
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            char x;
            cin>>x;
            if(x=='0')a[i][j]=0;
            else a[i][j]=1;
        }
        
        
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==1)bfs(i,j);
        }
        
        cout<<ans;
        return 0; 
    }
    
  • 1

信息

ID
1007
难度
9
分类
(无)
标签
递交数
2
已通过
2
通过率
100%
上传者