prim算法(最小生成树)

Prim 算法 解决最小生成树问题!!

假设从该图中查找最小生成树:

prim算法是从一个点开始寻找与所生成树权值最小的路径:

会用到三个数组:

w[][]表示结点之间的权值
Min[]表示结点与生成树相连的最小权值
B[]表示结点是否被选取

true表示未选择
false表示已选择

以下图中,绿色为权值,红色为结点与生成树相连的最小权值,橙色表示已选中的结点。

​ 一般情况下,选择编号为1的结点作为起始点,

数组情况

很显然下一个就是选择的结点编号为2;

(抱歉4和5标反了0.0)

同理:

然后:




就这样一步一步完成!!

代码主体

初始化:MST = 0; Min[] = {0x3f3f3f3f}; Min[1] = 0;
    for (int i = 1; i <= n; i++)
	{
		k = 0;
		for (int j = 1; j <= n; j++)
		{
			if (B[j] && Min[j] < Min[k])
				k = j;
		}
		MST+=Min[k];
		B[k] = false;
		for (int j = 1; j <= n; j++)
		{
			if (B[j] && Min[j] > w[k][j])
				Min[j] = w[k][j];
		}
	}
posted @ 2021-03-02 13:41  你看码!!!  阅读(42)  评论(0)    收藏  举报