阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。 【说明】 应用Prim算法求解连通网络的最小生成树问题。请阅读程序后填空。 const int MaxInt=INT MAX; //INT MAX的值在<limits.h>

admin2009-02-15  32

问题 阅读下列C程序和程序说明,将应填入(n)处的字句写在对应栏内。
   【说明】  应用Prim算法求解连通网络的最小生成树问题。请阅读程序后填空。
   const int MaxInt=INT MAX;    //INT MAX的值在<limits.h>中
   const int n=6;    //图的顶点数,应由用户定义
   typedef int AdjMatrix[n][n];    //用二维数组作为邻接矩阵表示
   typedef struct{    //生成树的边结点
       int fromVex,to Vex;    //边的起点与终点
       int weight;    //边上的权值
   }TreeEdSenode;
   typedef TreeEdgeNode MST[n-1];    //最小生成树定义

   void PrimMST (AdjMatrix G,MST T,int rt){
   //从顶点rt出发构造图G的最小生成树T,rt成为树的根结点
       TreeEdgeNode e;  int i,k=0,min,minpos,v;
       for(i=0;i<n;i++)    //初始化最小生成树T
         if(i!=rt){
           T[k].fromVex=rt;
             (1);
           T[k++].weight=G[rt]
         }
       for(k=0;k<n-1;k++){    //依次求MST的候选边
           (2);
         for(i=k;i<n-1;i++)    八遍历当前候选边集合
           if(T.weight<min)    //选具有最小权值的候选边
           {min=T.weight;(3);}
         if(min==MaxInt)    //图不连通,出错处理
           {cerr<<“Graph is disconnected!”<<endl;  exit(1);}
         e=T[minpos];T[minpos]=T[k];(4);
         v=T[k].to Vex;
         for(i=k+1;i<n-1;i++)    //修改候选边集合
           if(G[v][T.to Vex]<T.weight){
             T.weight=G[v][T.toVex];
               (5);
           }
         }
   }

选项

答案(1)T[k].toVex=I (2)min=MaxInt (3)minpos=i (4)T[k]=e; (5)T[i].fromVex=v

解析 (1)T[k].toVex=i
   树n边的入度点。
(2)min=MaxInt
   最小值变量初始化。
(3)minpos=i
   最小值结点的位置。
(4)T[k]=e;
   T[minpos]与T[k]交换。
(5)T.fromVex=v
   候选边的出度点。
转载请注明原文地址:https://kaotiyun.com/show/6rDZ777K
0

最新回复(0)