BFS(广度优先搜索算法)
bool visited[MAX_VERTEX_NUM] ; //标记是否被访问
void BFSTraverse(Graph G){
for(i=0;i<G.vernum;i++) visited[i] = FALSE;//将元素全部标记为未被访问过
InitQueue(Q); //初始化辅助队列Q
for(i=0;i<G.vernum;i++){ //从0号顶点开始遍历
if(!visited[i]) BFS(G,i); //对每个连通分量调用一次BFS
}
}
void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G
visit(v); //访问初始节点v
visited[i] = TRUE;//对v做已访问标记
EnQueue(Q,v);//顶点v入队列Q
while(!IsEmpty(Q)){
DeQueue(Q,v);//出队
for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)) //检测v所有的邻接点
if(!visited[w]){ //w为v的尚未访问的邻接顶点
visit(w); //访问顶点w
visited[w] = TRUE;
EnQueue(Q,w);//顶点w入队列
}
}
}
深度优先遍历
bool visited[MAX_VERTEX_NUM]; //访问标记数组
void DFSTraverse(Graph G){
for(v=0;v<G.vernum;v++) visited[v]=FALSE; //初始化已访问标记数据
for(v=0;v<vernum;v++){ //对每个连通分量调用一次DFS
if(!visited[v])
DFS(G,v);
}
}
void DFS(Graph G,int v){
visit(v);
visited[v]=TRUE;
for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))
if(!visited[w]){ //w为u的尚未访问的邻接顶点
DFS(G,w);
}
}