您的位置:首页 > 其它

搜索算法总结

2012-05-19 16:41 204 查看
一:广度优先搜索

思想:

1.在搜索树种任意选择一个节点A

2.从该节点出发访问他的所有子节点:B,C,D...

3.以B节点为根节点,访问它的所有子节点:T,N,M...

4.重复3步骤,直到所有节点被访问

解决方法:队列

利用队列存储未访问其子节点的节点,已经访问完其子节点的从队头出来,没有访问到期子节点的从队尾进来。



如上图a,假如选的V1为开始节点,则访问顺序依次为 V1-->V2-->V3-->V4-->V5-->V6-->V7

V1 进队,访问V1的子节点V2,V3 。

V2,V3进队,V1出队

V4,V4进队,V2出队

.....

知道V7出队,访问完所有节点。

广度优先搜索算法框架:

void BRF(){

Node *Q=NULL;

v1入队Q;

while(Q!=NULL){

取Q的头元素V1;

对V1的所有儿子节点V{

if(v是叶子节点) 计算最优值;

else{

if(v满足预设条件) v入队Q;

else 舍去v;

}

标记V1;

}

}

}

二:深度优先搜索算法:

思想:



1.任选一点作为根节点a

2.访问V1的从左向右的第一个子节点b

3.以b为节点重复1,2步骤

搜索过程:a-->b-->c-->f-->c-->d-->g

解决方法:栈

1.a进栈,b进栈,c进栈

2.c是叶子节点了,回溯,c出栈

3.搜索到b其他节f,f进栈,c进栈

4.c是叶子节点,c出栈,f出栈,b出栈

5.搜索到a的其他未访问的子节点d,d进栈,g进栈

6.g是叶子节点,出栈,d出栈,a出栈

7.栈为0,结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: