图的遍历
深度优先遍历
深度优先遍历
bool visited[MaxVertexNum]; // 顶点访问标记数组
void DFS(ALGraph G, int v) {
// 从顶点 v 出发递归的深度优先遍历图 G(包含 v 的连通块)
visited[v] = true; // 标记顶点 v 访问
visit(G, v); // 访问顶点 v
for(ArcNode* p = G.vertices[v].first; p!=NULL; p=p->next) {
// 对顶点 v 尚未访问 的邻接顶点 p 递归调⽤ DFS
if(!visited[p->adjvex]) {
DFS(G, p->adjvex);
} } }
void DFSTraverse(ALGraph G) {
for(int i=0; i<G.vexnum; i++) visited[i] = false; // 标记所有顶点为没有访问
for(int i=0; i<G.vexnum; i++) {
// 对所有没有访问的顶点i调⽤DFS 访问该顶点所在连通块
if(!visited[i]) {
DFS(G, i);
} } }
⼴度优先遍历
void BFSTraverse(MGraph G) {
for