简单摘抄一下深度优先搜索算法的概念,编程实现语句和应用场景
概念:
从起点开始前进,当碰到岔道口时,总是选择其中一条岔路前进,在岔路上如果又遇到新的岔道口,任然选择新岔道口的其中一条岔路前进,直到碰到死胡同才退回最近的岔道口选择另一条岔路;
总是以“深度”作为前进的关键词;
深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索算法;
深度优先算法可以使用栈来实现,与树的先序遍历类似。
递归的方式便于理解。
编程伪代码语句:
void DFS ( Vertex V ){
visited[V] = true ;
for ( V 的每个邻接点 W ){
if ( !visited[W] )
DFS ( W );
}
}
DFS邻接表存储代码:
void visit( Vertex V ){
printf("正在访问顶点%d\n",V);
}
// Visited[] 为全局变量,初始化为false
void DFS ( LGraph Graph, Vertex V, void ( *Visit)(Vertex)){
// 以V为出发点对邻接表存储的图Graph进行DFS搜索
PtrToAdjvNode W;
Visit( V ); //访问第V个顶点
Visited[V] = true ; // 标记访问
for ( W = Graph->G[V].FirstEdge; W; W = W->Next) // 对V的每个邻接点W->Adjv
if ( !Visited[W->Adjv] ) //若W->Adjv未被访问
DFS ( Graph, V, Visit);
}