简单的说一下广搜算法,带个例题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      搜索过程没有回溯,是一种牺牲空间换取时间的方法。

 

下边是给出的例题的代码

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值