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立体仓库货位优化分配算法的研究
- 下一篇:城市轨道交通线网规模预测+文献综述
-
-
-
-
-
-
-
NFC协议物理层的软件实现+文献综述
浅析中国古代宗法制度
江苏省某高中学生体质现状的调查研究
g-C3N4光催化剂的制备和光催化性能研究
巴金《激流三部曲》高觉新的悲剧命运
上市公司股权结构对经营绩效的影响研究
中国传统元素在游戏角色...
高警觉工作人群的元情绪...
现代简约美式风格在室内家装中的运用
C++最短路径算法研究和程序设计