码迷,mamicode.com
首页 > 其他好文 > 详细

校园导游图的课程设计(三)

时间:2014-12-12 22:02:40      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:blog   ar   os   使用   sp   for   on   div   art   

两天和作一天吧

只要是作 prime 算法的实现,作用是找一个图的最小生成树,用的是列表

void Prim( ListMatrix *G, int start )
/*
 * 寻找一某一点为核心的最佳布线
 * 即使用prime最小生成树
 */
 {
         struct{
                 int adjvex;
                 int lowcost;
         }closedge[NUMMAX];

         int i,j,k,m,min;
         ArcNode * p;

         closedge[start].lowcost = 0;

         for( i=1; i<=G->vexnum; i++ )
         {
                 if( i != start )
                 {
                         closedge[i].adjvex = start;
                         closedge[i].lowcost = INFNITY;
                 }
         }//初始化,无穷大
         
         p = G->vertex[start].next;
         while( p != NULL )
         {
                 closedge[p->adjvex].lowcost = p->weight;
                 p = p->next;
         }//复制

         for( j=1; j<=G->vexnum; j++ )
         {
                 min = INFNITY;
                 for( k=1; k<=G->vexnum; k++ )
                 {
                          if( closedge[k].lowcost!=0 && closedge[k].lowcost < min )
                         {
                              m = k;
                              min = closedge[k].lowcost;
                         }
                 }//挑选最小的

                 closedge[m].lowcost = 0;

                 p = G->vertex[m].next;

                 while( p != NULL )
                 {
                         if( p->weight < closedge[p->adjvex].lowcost )
                         {
                                 closedge[p->adjvex].lowcost = p->weight;
                                 closedge[p->adjvex].adjvex = m;
                         }
                         p = p->next;
                 }//while 找到变短的
         }
                       printf("\t\t\t\t\t\t\t布线方式:\n");
         for( i=1; i<=G->vexnum; i++ )
         {
                 if( i!= start)
                 {
                       printf("\t\t\t\t\t\t\t%d 从%d:%s 到 %d:%s\n ",i,closedge[i].adjvex,
                                 NumtoName(G,closedge[i].adjvex),i,NumtoName(G,i));
                        
                 }
         }

 }

  prime算法的核心在与 在V 和 V-S 集合之间寻找一个最短一个路径,将这个路径的V-S 头放在 V集,在进行下一步,直到最后。

还有就是节点的删除和添加,弧的添加和删除

M节点的删除的思路:

             删除与之相连的弧

             删除M节点,将后面的节点往前移动

             遍历所有弧,将弧尾节点指向大于M,自减一

             完成

 

校园导游图的课程设计(三)

标签:blog   ar   os   使用   sp   for   on   div   art   

原文地址:http://www.cnblogs.com/dilidingzhi/p/4160435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!