关闭

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

标签: 算法扩展nullsearchstructini
501人阅读 评论(0) 收藏 举报
分类:

 

广度优先搜索(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      搜索过程没有回溯,是一种牺牲空间换取时间的方法。

 

下边是给出的例题的代码

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:167918次
    • 积分:1490
    • 等级:
    • 排名:千里之外
    • 原创:71篇
    • 转载:9篇
    • 译文:0篇
    • 评论:1条