方法一:
在每一层遍历开始前,计算队列中节点个数n,然后一口气将这n个节点处理完。代码框架如下:
high=0 //记录遍历到第几层
while(!queue.empty())
{
high++;
n=queue中节点个数
进行n次循环
{
node=queue.pop();
for node的所有相邻节点m
{
if(m未被访问过)
queue.push(m)
}
}
}
方法二:
在开始时设一个m=初始队列中最后一个元素。而后当队列遍历完m的相邻节点时,令m=队列中最后一个元素。代码框架如下:
int depth=0; //深度
while(!queue.empty())
{
m=queue的最后一个元素
p=queue的第一个元素
queue.pop();
for p相连的节点n
if n未被访问过
queue.push(n);
if(p与m相等)
{
depth++;
m=queue的最后一个元素
}
}