识别图元(Queue)

void Label()
{
 //初始化围墙
 for(int i=0;i<=m+1;i++)
 {
  pixel[0][i]=pixel[m+1][i]=0;
  pixel[i][0]=pixel[i][m+1]=0;
 }

 // 初始化offset
 Position offset[4];
 offset[0].row=0; offset[0].col=1; // 右
 offset[1].row=1; offset[1].col=0; //下
 offset[2].row=0; offset[2].col=-1; //左
 offset[3].row=-1; offset[3].col=0; //上

 int NumofNbrs=4;
 LinkedQueue<Position> Q;
 int id=1;
 Position here, nbr;

 //扫描所有象素
 for(int r=1; r<=m; r++)
  for(int c=1;c<=m; c++)
  {
   if(pixel[r][c]==1)// 新图元
   {
    pixel[r][c]==++id;
    here.row=r;
    here.col=c;
   }

   // 寻找其余图元
   do  
   {
    for(int i=0; i<NumofNbrs; i++)
    {
     //检查当前象素的所有相邻象素
     nbr.row=here.row+offset[i].row;
     nbr.col=here.row+offset[i].col;
     if(pixel[nbr.row][nbr.col]==1)
     {
      pixel[nbr.row][nbr.col]=id;
      Q.Add(nbr);
     }
    }
    // 还有未探索的象素吗?
    if(Q.IsEmpty())
     break;
    Q.Delete(here);
   }while(1);
  }
}

Ref:<<数据结构,算法与应用>>P204~206

阅读更多
个人分类: 数据结构与算法
上一篇寻找电路布线最短路径(Queue)
下一篇函数指针
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭