分别以邻接矩阵和邻接表作为图的存储结构,给出连通图的深度优先
遍历的递归算法
算法思想:
(1)访问出发点 vi,并将其标记为已访问过。
(2)遍历 vi 的的每一个邻接点 vj,若 vi 未曾访问过,则以 vi 为新的出发点继续进行深度
优先遍历。
算法实现:
Boolean visited[max];
void DFS(Graph G, int v)
{ // 算法7.5从第v个顶点出发递归地深度优先遍历图G
// 访问标志数
int w;
visited[v] = TRUE; printf("%d ",v);
for (w=FirstAdjVex(G, v); w>=0; w=NextAdjVex(G, v, w))
// 访问第v个顶点
if (!visited[w]) // 对v的尚未访问的邻接顶点w递归调用DFS
DFS(G, w);
}
/*****************************************************/
/*以邻接矩阵作为存储结构*/
DFS1(MGraph G,int i)
{int j;
visited[i]=1;
printf("%c",G.vexs[i]);
for(j=1;j<=G.vexnum;j++)
if(!visited[j]&&G.arcs[i][j]==1) DFS1(G,j);
}
/*以邻接表作为存储结构*/
DFS2(ALGraph G,int i)
{int j;
ArcPtr p;
visited[i]=1;
printf("%c",G.vertices[i].data);
for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc)
{j=p->adjvex;
if(!visited[j]) DFS2(j);
}
}