2 条题解

  • 1
    //既然有深搜代码了,那就再附个宽搜的 
    #include<bits/stdc++.h>
    using namespace std;
    short dir[4][2]={0,1,1,0,0,-1,-1,0},q[1005][2],n,m,ans,ch[105][105];
    bool vis[105][105];
    void bfs(int i,int j)
    {
        vis[i][j]=1;
        int f=1,r=1;q[1][0]=i,q[1][1]=j;
        while(f<=r)
        {
            int x=q[f][0],y=q[f][1];
            for(int c=0;c<4;c++)
            {
                int nx=dir[c][0]+x,ny=dir[c][1]+y;
                if(ch[nx][ny]&&!vis[nx][ny]&&nx>=1&&nx<=n&&ny>=1&&ny<=m)
                {
                    r++;
                    q[r][0]=nx,q[r][1]=ny;
                    vis[nx][ny]=1;
                }
            }
            f++;
        }
        ans++;
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>ch[i][j];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(ch[i][j]&&!vis[i][j])
                    bfs(i,j);
        cout<<ans<<endl;
        return 0;
    }
    
    
  • 0
    @ 2023-06-27 21:47:43
    //轻松accepted
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[105][105],ans;
    int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    bool vis[105][105];
    void dfs(int x,int y)
    {
        vis[x][y]=true;
        for(int i=0;i<4;i++)
        {
            int nx=x+dir[i][0];
            int ny=y+dir[i][1];
            if(a[nx][ny]==1&&!vis[nx][ny])
            {
                vis[nx][ny]=true;
                dfs(nx,ny);
            }
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>a[i][j];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                if(!vis[i][j]&&a[i][j]==1)
                {
                    ans++;
                    dfs(i,j);
                }
            }
        cout<<ans<<endl;
        return 0;
    }
    
  • 1

信息

ID
1236
难度
5
分类
(无)
标签
递交数
20
已通过
12
通过率
60%
上传者