BFS算法(Final)
bool visited[Max_VERTEX_NUM]; //访问标记数组
void BFSTraverse(Graph G){ //对图G进行广度优先遍历
for(i=0;i<G.vexnum;++i){
visited[i]=false; //访问标记数组初始化
}
InitQueue(Q); //初始化辅助队列Q
for(i=0;i<G.vexnum;++i){ //从0号顶点开始遍历
if(!visited[i]) //对每个连通分量调用一次BFS
BFS(G,i); //vi为访问过,从vi开始BFS
}
}
//广度优先遍历
void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G
visit(v); //访问初始顶点v
visited[v]=true; //对v做已访问标记
Enqueue(Q,v); //顶点v入队列Q
while (!isEmpty(Q)) {
DeQueue(Q,v); //顶点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; //对w做已访问标记
EnQueue(Q,w); //顶点w入队列
}//if
}
}//while
}
DFS算法(Final)
bool visited[Max_VERTEX_NUM]; //访问标记数组
void DFSTraverse(Graph G){ //对图G进行深度优先遍历
for(v=0;v<G.vexnum;++v)
visited[v]=false; //初始化已访问标记数据
for (v=0; v<G.vexnum; ++v) { //本代码是从0开始遍历
if(!visited[v])
DFS(G,v);
}
}
void DFS(Graph G,int v){ //从顶点v出发,深度优先遍历图G
visit(v); //访问顶点v
visited[v]=true; //设为已访问标记
for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))
if(!visited[w]){ //w为u尚未访问的邻接顶点
DFS(G, w);
}
}