侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【例8.2】细胞

Allen Best
2024-04-27 / 0 评论 / 0 点赞 / 70 阅读 / 1,396 字
温馨提示:
本文最后更新于 2024-04-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#include<bits/stdc++.h> 
#define N 1001
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
using namespace std;
int n,m;
char g[N][N];
struct node{
    int x;
    int y;
}q[N*1000];
void bfs(int x0,int y0)
{
    int head=1,tail=1;
 
    q[tail].x=x0;
    q[tail].y=y0;
    tail++;
 
    while(head<tail)
    {
        int x=q[head].x;
        int y=q[head].y;
        g[x][y]='0';
        for(int i=0;i<4;i++)
        {
            int nx=x+dir[i][0];
            int ny=y+dir[i][1];
            if(0<=nx&&nx<n&&0<=ny&&ny<m&&g[nx][ny]!='0')
            {
                q[tail].x=nx;
                q[tail].y=ny;
                tail++;
            }
        }
        head++;
    }
}
int main()
{
    int cnt=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%s",g[i]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(g[i][j]!='0')
            {
                cnt++;
                bfs(i,j);
            }
    printf("%d\n",cnt);
    return 0;
}
细胞对列版
#include<bits/stdc++.h> 
#define N 1001
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
using namespace std;
int n,m;
char g[N][N];
struct node{
    int x;
    int y;
};
queue<node> q;
void bfs(int x0,int y0)
{
	node p;
	p.x=x0;
	p.y=y0;
    q.push(p);
 
    while(!q.empty())
    {
    	node f1 = q.front();
        int x=f1.x;
        int y=f1.y;
        g[x][y]='0';
        for(int i=0;i<4;i++)
        {
            int nx=x+dir[i][0];
            int ny=y+dir[i][1];
            if(0<=nx&&nx<n&&0<=ny&&ny<m&&g[nx][ny]!='0')
            {
            	node tf ;
                tf.x=nx;
                tf.y=ny;
                q.push(tf);
            }
        }
       q.pop();
    }
}
int main()
{
    int cnt=0;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%s",g[i]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(g[i][j]!='0')
            {
                cnt++;
                bfs(i,j);
            }
    printf("%d\n",cnt);
    return 0;
}

0

评论区