三江小渡的专栏

三江小渡

简单的说一下广搜算法,带个例题NYOJ115 城市平乱。

 

广度优先搜索(BFS)的原理和应用

    二叉树中的层序遍历就属于一种BFS(Board First Search)

    

    层序遍历会得到ABCDEFG的层序优先序列(BFS序列)。在层序遍历过程中,可以注意到先访问的节点的孩子节点必然先被访问(如访问了A后访问B和C,那么B的孩子结点一定在C的孩子结点前被访问――仅针对下一层的孩子而言)。据这个特性,可以用队列来实现这个遍历。

void Layer(bitree *p)
{
 queue<node*> Q; //
定义一个队列
 node *N;
 Q.push(*p);   //
起始点入队
 while(!Q.empty())
 {
   N=Q.front();
   Q.pop();
   cout<<N->data<<endl;
   if(N->lchild!=NULL)  //
将扩展子结点(仅一层)全都入队
   Q.push(N->lchild);
   if(N->rchild!=NULL)
   Q.push(N->rchild);
 }
}

BFS比它更进一步,可以针对图的结构进行BFS遍历

BFS(从V1开始)路径是

广搜的一般结构如下:

定义一个队列;

起始点入队;

while(队列不空){

    队头结点出队;

    若它是所求的目标状态,跳出循环;

    否则,将它扩展出的子结点,全都入队;

}

若循环中找到目标,输出结果;

否则输出无解;

它的主要特点是:

n      每次队头元素出队时,扩展其全部的子结点,并用队列记录下来。

n      搜索过程没有回溯,是一种牺牲空间换取时间的方法。

 

下边是给出的例题的代码

 

阅读更多
个人分类: 图论 搜索算法
想对作者说点什么? 我来说一句

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

不良信息举报

简单的说一下广搜算法,带个例题NYOJ115 城市平乱。

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭