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

数据结构拓展习题:图判断顶点间是否存在简单路径并打印

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

题目:已知邻接表表示的有向图,请编程判断从第u顶点至第v顶点是否有简单路径,若有则打印出该路径上的顶点。

bool visited[MAX_VERTEX_NUM];

bool Reachable(ALGraph G, int u, int v)

{

       int flag = 0;

       Sqstack S, T;

       InitStack(S);

       InitStack(T);

       int parent[MAX_VERTEX_NUM] = { 0 };

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

       {

              visited[i] = false;

       }

       Push(S, u);//将开始顶点入栈

       visited[u] = true;//将开始顶点设为已访问

       int e, i;

       ArcNode* p;

       while (!StackEmpty(S))

       {

              e = Pop(S);

              p = G.vertices[e].firstarc;

              while (p)

              {

                     if (p->adjvex == v)//如果找到了目标顶点v

                     {

                            flag = 1;//标记为已找到

                            parent[p->adjvex] == e;//v的前驱结点为e

                            printf("Path: ");

                            i = v;//将栈中的元素颠倒过来倒序输出路径

                            while (i != u)

                            {

                                   Push(T, i);

                                   i = parent[i];

                            }

                            Push(T, u);

                            while (!StackEmpty(T))

                            {

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

                            }

                     }

                     else if (visited[p->adjvex] == false)//如果未找到且邻接点未访问过

                     {

                            visited[p->adjvex] = true;//继续搜索

                            parent[p->adjvex] = e;

                            Push(S, p->adjvex);

                     }

                     p = p->nextarc;

              }

       }

       if (flag)

              return true;

       return false;

}


数据结构拓展习题:图判断顶点间是否存在简单路径并打印的评论 (共 条)

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