标签: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