• 2022-05-30
    试完成求有向图的强连通分量的算法,并分析算法的时间复杂度。
  • 【解答】算法如下:[br][/br]int visited[MAXSIZE];[br][/br]int finished[MAXSIZE];[br][/br]int count; //count在第一次深度优先遍历中用于指示finished数组的填充位置[br][/br]void Get_SGraph(OLGraph G)//求十字链表结构储存的有向图G的强连通分量[br][/br]{[br][/br]       count=0;[br][/br]       for(v=0;v=0;i--) //第二次逆向的深度优先遍历[br][/br]       {[br][/br]         v=finished(i);[br][/br]         if(!visited[v])[br][/br]         {[br][/br]              printf("\n"); //不同的强连通分量在不同的行输出[br][/br]              DFS2(G,v);[br][/br]              }[br][/br]         }//for[br][/br]}//Get_SGraph[br][/br]         void DFS1(OLGraph G,int v)//第一次深度优先遍历的算法[br][/br]        {[br][/br]        visited[v]=1;[br][/br]        for(p=G.xlist[v].firstout;p;p=p->tlink)[br][/br]        {                w=p->headvex;[br][/br]                if(!visited[w]) DFS1(G,w);[br][/br]        }//for[br][/br]        finished[++count]=v; //在第一次遍历中建立finished数组[br][/br]}//DFS1[br][/br]void DFS2(OLGraph G,int v)//第二次逆向的深度优先遍历的算法[br][/br]{[br][/br]       visited[v]=1;[br][/br]       printf("%d",v); //在第二次遍历中输出结点序号[br][/br]       for(p=G.xlist[v].firstin;p;p=p->hlink)[br][/br]       {[br][/br]       w=p->tailvex;[br][/br]       if(!visited[w]) DFS2(G,w);[br][/br]   }//for[br][/br]}//DFS2求有向图的强连通分量的算法的时间复杂度和深度优先遍历相同,也为O(n+e)。
    本题目来自[网课答案]本页地址:https://www.wkda.cn/ask/tpzjatzmjezajzo.html

    内容

    • 0

      下面( )方法可用于求无向图的连通分量。 A: 遍历 B: 拓扑排序 C: Dijkstra算法 D: Prim算法

    • 1

      对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal算法求最小生成树的时间复杂度为()。

    • 2

      设计一个算法,求出无向图G的连通分量个数。

    • 3

      【简答题】假设图 G 采用邻接矩阵存储。给出图的广度优先遍历算法,并分析算法的时间复杂度

    • 4

      强连通分量是有向图中的极大强连通子图。( )