对图的深度优先搜索遍历DFS(或BFS)算法稍作修改,就可得到构造图的DFS生成树算法。
在算法中,树的存储结构采用孩子—兄弟表示法。首先建立从某个顶点V出发,建立一个树结点,然后再分别以V的邻接点为起始点,建立相应的子生成树,并将其作为V 结点的子树链接到V结点上。显然,算法是一个递归算法。
(1) DFStree算法
typedef struct CSNode
{
ElemType data ;
struct CSNode *firstchild , *nextsibling ;
}CSNode ;
CSNode *DFStree(ALGraph *G , int v)
{
CSNode *T , *ptr , *q ;
LinkNode *p ;
int w ;
Visited[v]=TRUE ;
T=(CSNode *)malloc(sizeof(CSNode)) ;
T->data=G->AdjList[v].data ;
T->firstchild=T->nextsibling=NULL ; // 建立根结点
q=NULL ;
p=G->AdjList[v].firstarc ;
while (p!=NULL)
{
w=p->adjvex ;
if (!Visited[w])
{
&nb