分支界限算法--细胞个数问题

本文探讨如何使用分支界限算法解决矩形阵列中细胞个数的问题。首先,从文件读取m*n矩阵并转为boolean类型。接着,自上而下,自左而右寻找并标记第一个细胞,将其相邻细胞入队。然后,不断从队列中取出细胞,标记其相邻细胞并入队,直到队列为空,表示已找出一个细胞。重复此过程,直至矩阵中无细胞剩余,最后输出细胞总数。
摘要由CSDN通过智能技术生成

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

【算法分析】
⑴从文件中读入m*n矩阵阵列,将其转换为boolean矩阵存入bz数组中;
⑵沿bz数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
⑶将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为false;
⑷将h队的队头出队,沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置bz数组置为false;
⑸重复4,直至h队空为止,则此时找出了一个细胞;
⑹重复2,直至矩阵找不到细胞;
⑺输出找到的细胞数。

#include<cstdio>
using namespace std;
int dx[4]={-1,0,1,0},   // x,y 方向上的增量
    dy[4]={0,1,0,-1};
int bz[100][100],num=0,n,m;   //二维数组,存储原始矩阵 
void doit(int p,int q){  //p,q矩阵的行列号
   int x,y,t,w,i;
   int h[1000][2];  //顺序队列,记录入队细胞元素在二维数组中的位置
   num++;  //细胞个数增1
   bz[p][q]=0;  //细胞元素清0
   t=0;w=1;  //队列指针。t队首,w 队尾
   h[1][1]=p;  h[1][2]=q;       //遇到的第一个细胞入队
     do    {
           t++;                               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值