3.2.1 穷举搜索
1)深度优先搜索法
对树的先根遍历的推广称为深度优先搜索法。其基本方法是:设有一图G,由其某一顶点v0出发。选择一个与顶点v0相邻并且从未被访问过的顶点vi访问。继而从vi出发,选择一个与vi相邻并且从未被访问过的顶点vj进行访问。依次继续。如果当前被访问过的顶点的所有邻接顶点都已经被访问过,则退回到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点w,从w出发按同样的方法向前遍历,直到图中所有顶点都被访问[9]。则得其递归算法如下:
Boolean visited[MAX_VERTEX_NUM]; //访问标志数组
Status (*VisitFunc)(int v); //VisitFunc是访问函数,对图的每个顶点调用该函数
void DFSTraverse (Graph G, Status(*Visit)(int v)){
VisitFunc = Visit;
for(v=0; v<G.vexnum; ++v)
visited[v] = FALSE; //访问标志数组初始化
for(v=0; v<G.vexnum; ++v)
if(!visited[v])
DFS(G, v); //对尚未访问的顶点调用DFS
}
void DFS(Graph G, int v){ //从第v个顶点出发递归地深度优先遍历图G
visited[v]=TRUE; VisitFunc(v); //访问第v个顶点
for(w=FirstAdjVex(G,v); w>=0; w=NextAdjVex(G,v,w))
//FirstAdjVex返回v的第一个邻接顶点,若顶点在G中没有邻接顶点,则返回空(0)。
//若w是v的邻接顶点,NextAdjVex返回v的(相对于w的)下一个邻接顶点。
//若w是v的最后一个邻接点,则返回空(0)。
if(!visited[w])
DFS(G, w); //对v的尚未访问的邻接顶点w调用DFS
}
2) 广度优先搜索法
树的按层次推广,称为图的广度优先搜索,其基本思想是:首先,访问初始顶点vi,将其标记为已经访问过,接着访问顶点vi的所以未被访问过的邻接点vi1,vi2,....,vit,并且将其均标记为已经访问,依照此法循环,直至图中所有和初始顶点vi有路径相通的顶点都已经被访问过为止。总结得其非递归算法如下:
Boolean visited[MAX_VERTEX_NUM]; //访问标志数组
Status (*VisitFunc)(int v); //VisitFunc是访问函数,对图的每个顶点调用该函数
- 上一篇:MATLAB立体仓库货位优化分配算法的研究
- 下一篇:城市轨道交通线网规模预测+文献综述
-
-
-
-
-
-
-
乳业同业并购式全产业链...
十二层带中心支撑钢结构...
java+mysql车辆管理系统的设计+源代码
中考体育项目与体育教学合理结合的研究
电站锅炉暖风器设计任务书
大众媒体对公共政策制定的影响
当代大学生慈善意识研究+文献综述
河岸冲刷和泥沙淤积的监测国内外研究现状
酸性水汽提装置总汽提塔设计+CAD图纸
杂拟谷盗体内共生菌沃尔...