无权无向图,只给出节点个数,怎么用Prim算法求最小生成树

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 10:33:22
无权无向图,只给出节点个数,怎么用Prim算法求最小生成树

无权无向图,只给出节点个数,怎么用Prim算法求最小生成树
无权无向图,只给出节点个数,怎么用Prim算法求最小生成树

无权无向图,只给出节点个数,怎么用Prim算法求最小生成树
Prim算法的主要运行时间花在过程②的选边中.看起来复杂度是O(VE)=O(V^3)不是么,效率也太低了吧……

为了比较快速地选边,我们用两个数组lowcost、closest动态地维护每一个点到S的最短距离.在某一状态下,lowcost[i]表示所有与i相连且另一端点在S中的边中的权值最小值,closest[i]表示在S中且与i相连的点中与i之间距离最小的点.显然,lowcost[i]=w(i,closest[i]).需要注意的是两个数组记录的都是边而不是路径.若i没有边直接连向S,则lowcost[i]=∞.另外,若i已在S中,则lowcost[i]=0.

设出发点为x.初始时对于任意k∈V,closest[k]=x,lowcost[k]=w(k,x)【w(i,j)表示i、j间的距离.初始化时,若两点间没有边则w(i,j)赋为一个足够大的整数(如maxint),并且所有点到自身的距离赋为0,即w(i,i)=0】

每一次找出lowcost中不为0的最小值lowcost[i],然后把i加入S(即lowcost[i]:=0),然后对于图中所有点k,若w(k,i)
以上操作重复|V|-1次结束.由于每次加入S的点i都在当时取到了符合流程②的边min{lowcost},而lowcost[i]=w(i,closest[i]),所以此时的最小生成树的各边就是(i,closest[i]),i∈V且not (i=x)【需要注意的是出发点x的closest[x]还是x,所以应忽略,实际取到x-1条边】.把i从1取到|V|,便得到最小生成树T的每条边.

程序:
for(k= 1;k <= n; k++){ //x为S中的第一个点,x任选一个都可
lowcost[k] = w[x][k]; //lowcost表示k点到前集合的最小值,是k与前集合中的closet[k]间的距离
closest[k] = x;
} //初始化
for(i = 2; i <= n; i++){ //除去x,还要加入n – 1个点
temp = maxint;
for(j = 1; j <= n; j++)
if(lowcost[j] < temp && lowcost[j] != 0) {
temp = lowcost[j];
k = j;
} //找出S外距S最近的点k
lowcost[k] = 0; //将k加入生成树
for(j = 1; j <= n; j++)
if(w[k][j] < lowcost[j]){
lowcost[j] = w[k][j];
closest[j] = k;
} //由新加入S中的k点使某些点到S的距离缩短,所以更新各点的lowcost和closest,即再次初始化
}
for(i = 1; i <= n; i++)
if(i != closest[i]){
printf(“%d %d”, i, closest[i]);
} //输出最小生成树的各边
不难看出,以上算法包含一个二重循环,算法复杂度为O(V^2),与图的稠密度无关

无权无向图,只给出节点个数,怎么用Prim算法求最小生成树 无向无权图的邻接矩阵表示中,顶点vi的度等于?rt 图的点着色图T为一个邻接矩阵储存类型的无向图,完成将图的最优着色(将节点储存到二维数组COL[colmax][max]colmax为最多可使用颜色个数 建筑制图剖面图与节点图的区别剖面图是不是只是垂直平面,没有平行平面图的说法?我只见到横向节点,竖向节点的说法?节点方向怎么界定?是切口的方向还是人看切口的方向? 一个电路中有两个无伴电压源,怎么用节点电压法求各节点电压呀,怎么表示电压源支路上的电流呀? 节点法怎么用谁能给我详细介绍一下节点法?他怎么用?最好有图. 请教无向无权图最小生成树算法:要求比Prim and Kruskal更快.图是undirected和unweighted.也可以认为是每个边的权重是一样的.感激不尽! 数据结构:n个顶点无向图 用邻接矩阵表示 图中有多少条边~怎么判别~很苦恼~我问的不是算法~是给出了一个具体的矩阵~然后怎么根据这个矩阵来判别~ 这种有节点的图怎么画? 电路中的节点法怎么用? 怎么用节点发判断并联串联? 最短路径Floyd算法有一个无向加权图,利用Floyd算法可以求出任意两个节点之间的最短路径.但是,如果需要找出一个节点,使其距离图中其他所有节点的路径之和最短.除了枚举所有的点之外,有没 数据结构:无向图适合邻接矩阵,有向图适合邻接表这句话对吗,并给出理由 用c++实现 利用BFS算法在图中求各顶点与搜索起点间的最短距离在无权有向图中,两个顶点之间的距离定义为:如果顶点i经过k步到达顶点j,则顶点i到顶点j的距离为k.怎么用c++,利用BFS求得一个 设G是一棵无向树且有2个4度节点,3个3度节点,其余均为叶节点.(1)求出该无向树共有多少个节点.(2)画出两棵不同构的满足上述要求的无向树. 结构节点是平面图还是剖面图?怎么看节点图.怎么区分室内,室外. 有权代理与无权代理怎么区别 平面桁架节点法问题如图,请各位告诉我怎么用节点法求出各杆的受力情况,最好能详细点,