zoukankan      html  css  js  c++  java
  • 校园导游图的课程设计(三)

    两天和作一天吧

    只要是作 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("							布线方式:
    ");
             for( i=1; i<=G->vexnum; i++ )
             {
                     if( i!= start)
                     {
                           printf("							%d 从%d:%s 到 %d:%s
     ",i,closedge[i].adjvex,
                                     NumtoName(G,closedge[i].adjvex),i,NumtoName(G,i));
                            
                     }
             }
    
     }
    

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

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

    M节点的删除的思路:

                 删除与之相连的弧

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

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

                 完成

  • 相关阅读:
    【转】理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods
    折腾weibo开放平台
    netsh——常用命令及使用技巧
    The Enemies of Achievement
    java内存模型
    命名规则
    JS 控制加载页面对象
    点击图片弹出上传文件对话框
    ASP.NET判断用户是否在线
    ASP.Net处理QueryString函数汉字参数传递错误
  • 原文地址:https://www.cnblogs.com/dilidingzhi/p/4160435.html
Copyright © 2011-2022 走看看