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