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

原创 2011年01月21日 21:37:00

 

广度优先搜索(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 城市平乱(dijkstra算法)

题目115 题目信息 运行结果 本题排行 讨论区 城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎...

NYOJ 题目115 城市平乱 (最短路径-迪杰斯特拉算法)

城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。 他在用这N个部...

HDUOJ1874 畅通工程续 和 NYOJ 115 城市平乱【Dijkstra 算法】

原题链接:nyoj 115:http://acm.nyist.net/JudgeOnline/problem.php?pid=115      hduoj  1874: http://acm.hdu....

NYOJ 115 城市平乱(Dijkstra入门)

NYOJ 115 城市平乱(Dijkstra入门)

nyoj 115 城市平乱

http://acm.nyist.net/JudgeOnline/problem.php?pid=115 dijstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 思路:以叛乱...

nyoj 115 城市平乱(spfa)

将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。 现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一...

nyoj-115城市平乱-各种解法

城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。他在用这N个部队维护着M个城市的治安,这M个城...

NYOJ115城市平乱_单源点最短路径(spfa)

题目链接 第一次敲的时候我用的是vector,看题的时候心里还在想着要判重边,把代码都敲完后发现了问题,用vector没办法判断重边啊~又把数据结构赶紧改成了邻接矩阵,同时也发现了自己容易犯的错误!...

NYOJ115 城市平乱

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=115 题目分析:这肯定是一条求最短路的题,最开始的想法是用floyd算法来做,结果悲剧的...

NYOJ 115 城市平乱

城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。 他在用这N个部队维护着M...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的说一下广搜算法,带个例题NYOJ115 城市平乱。
举报原因:
原因补充:

(最多只允许输入30个字)