队列之连通块

这篇博客介绍了如何解决寻找一个n*m方格图中四连通的黑色格子连通块的问题。通过输入格子颜色,利用广度优先搜索(BFS)遍历黑色格子,并使用一个二维数组记录已搜索过的格子,最终得出连通块的数量。
摘要由CSDN通过智能技术生成

[问题描述]
一个nm的方格图,一些格子被涂成了黑色,在方格图中被标为1,白色格子标为0.问有多少个四连通的黑色格子连通块。 四连通的黑色格子连通块指的是一片由黑色格子组成区域,其中的每个黑色格子能通过四连通的走法(上下左右),只走黑色格子,到达该联通块中的其它黑色格子。
[输入]
第一行两个整数n,m(1<=n,m<=100),表示一个n
m的方格图.
接下来n行,每行m个整数,分别为0或1,表示这个格子是黑色还是白色。
[输出]
只有一行,一个整数ans,表示图中有ans个黑色格子连通块.

int a[110][110],q[110][2];//a数组存储所输入的黑格子,这里定义为全局方便直接函数调用
int n,m;
int flag[4][2]={ {0,1},{0,-1},{1,0},{-1,0}};//相邻的四个黑格子
bool p[110][110];//p数组用来判断这个黑格子是否被搜索过
void bfs(int x,int y)
{
int front=0,rear=2;
q[1][0]=x;//将新搜索到的点保存到q数组
q[1][1]=y;
while(front<rear-1)//front为队头,rear为队尾
{
front++;
x=q[front][0];
y=q[front][1];
for(int i=0;i<4;i++)
{
int x1=x+flag[i][0];//(x1,y1)就是(x,y)的相邻的点
int y1=y+flag[i][1];
if(x1<1 || x1>n || y1>m || y1<1 || !a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值