欢迎光临散文网 会员登陆 & 注册

数据结构拓展习题:邻接表的深度优先非递归遍历

2022-05-28 00:12 作者:回到唐朝当少爷  | 我要投稿

题目:一个连通图采用邻接表作为存储结构,设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程。

bool visited[MAX_VERTEX_NUM];

void DFS(ALGraph G, int v)

{

       Sqstack S;

       InitStack(S);

       visited[v] = true;

       Push(S, v);

       printf("%d ", G.vertices[v].data);

       ArcNode* p;

       while (!StackEmpty(S))

       {

              p = G.vertices[GetTop(S)].firstarc;//p指向栈顶元素的第一个邻接点

              while (p)

              {

                     if (visited[p->adjvex] == false)//如果p指向的结点没有被访问

                     {

                            visited[p->adjvex] = true;//访问该结点

                            printf("%d ", G.vertices[p->adjvex].data);

                            Push(S, p->adjvex);//将该结点入栈

                            p = G.vertices[p->adjvex].firstarc;//p指向该结点的第一个邻接点

                     }

else//如果p指向的结点被访问过,

                            p = p->nextarc; //则访问该结点没有被访问过的邻接点

              }

              if (p == NULL)

                     Pop(S);

       }

}

void DFS_Traverse(ALGraph G)

{

       for (int v = 0; v < G.vexnum; v++)

              visited[v] = FALSE;

       for (int v = 0; v < G.vexnum; v++)

       {

              if (!visited[v])

                     DFS(G, v);

       }

}


数据结构拓展习题:邻接表的深度优先非递归遍历的评论 (共 条)

分享到微博请遵守国家法律