ZP741552720 2015-06-24 10:07 采纳率: 0%
浏览 1652

kruscal 求最小树 问题求大神

图片说明
对图中的图 求出她所有的最小二叉树图中有2棵最小树 要求用kruscal 算法

我想到的是 要在排序函数中产生2 组排序 1 2 3 4 4 * 5
1 2 3 4* 4 5 我用的是选择排序 但没弄出来 求大神给指导下 谢谢
void kruskal(mgraph g)
{
int i,j;
int k;
int u1,v1,sn1,sn2;
edge e1[MS]; //边权值列表
int vset[MS]; //顶点链接判断列表

k=0;
for(i=0;i<g.d;i++)     //边权值列表初始化  
{
   for(j=0;j<g.d;j++)
   if(g.edges[i][j]!=0&&g.edges[i][j]!=inf)
   {
    e1[k].q=i; e1[k].z=j; e1[k].w=g.edges[i][j];
    k++; 
   }
} 

 //对 edga 进行排序 (从小到大) 
 sort(e1,k);

 for(i=0;i<g.d;i++)     //初始化辅助数组 
    vset[i]=i;

 k=1;      
 j=0;
 while(k<g.d)
 {
    u1=e1[j].q; v1=e1[j].z;
    sn1=vset[u1]; sn2=vset[v1];

    if(sn1!=sn2)
    {
        printf("边(%d,%d)权为:%d \n",sn1,sn2,e1[j].w);
        k++;
        for(i=0;i<g.d;i++)     //归 sn1 和 sn2 与一个数组  
           if(vset[i]==sn2)
              vset[i]=sn1;
    }
    j++;
 } 

}

//选择排序
void sort(edge e1[MS],int b)
{
int i,j;
int k;
edge tomp;

for(i=0;i<b;i++)
{
    k=i;
    for(j=i;j<b;j++)
    {
        if(e1[k].w>e1[j].w)
        k=j;
    }
    tomp=e1[k];
    e1[k]=e1[i];
    e1[i]=tomp;
}

}
求大哥大姐 帮帮忙 看下要怎样改!!!!!

  • 写回答

3条回答

  • ZP741552720 2015-06-24 10:18
    关注

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算