给有需要的人-(邻接矩阵转换边集数组)

今天小孱弱弱像往常一样码,克鲁斯卡尔算法中的边集数组,由于比较冷门,网上几乎找不到邻接矩阵转化边集数组的信息,于是小孱弱鼓起勇气写一篇,帮助有需要的人。
为了保证时间复杂度不能太高,我们在遍历邻接矩阵时,由于是无向图,我们只需遍历左下三角形就ok,瞬间复杂度降低一大块,再往下,使用简单的冒泡排序将结构体按照权值排好。其实还有可以改进的地方,这只是做参考,希望帮到大家!

//邻接矩阵转化边集数组 
void  TransEdge(Edge edges[],MGraph *G)
{
 int i,j,k;
 for(i=0;i<G->numVertexes;i++)
 for(j=0,k=0;j<G->arc[i][j]!=0;j++,k++)
 {
  if(G->arc[i][j]!=0&&G->arc[i][j]<INFINITY)
  {
   edges[k].begin=i;
   edges[k].end=j;
   edges[k].weight=G->arc[i][j];
  }
 }
 //按照权排序(冒泡)
    for(i=0;i<k-1;i++)
        for(j=i+1;j<k;j++)
            {
                if(edges[i].weight>edges[j].weight)
                {
                    Edge T;
                    T=edges[i];edges[i]=edges[j];edges[j]=T;
                }
            }
            
}
上一篇:最小生成树之克鲁斯卡尔算法


下一篇:Codeforces Round #656 (Div. 3)E. Directing Edges(拓扑排序+构造dag图)