【算法】最小生成树prim算法

原创 2013年12月04日 21:42:44

最小生成树也就是在带权无向图中选取n-1条边,使得n个点都相互连通,而且距离最短。
具体的prim算法如下。
有一个无向图,顶点以及相互之间边以及权值如下。

在prim算法中,对于边和边之间会形成一个邻接矩阵。

int path[][] = new int[n+1][n+1];            
for (int i = 1; i < n+1; i++) {
    for (int j = 1; j < n+1; j++) {
	path[i][j] = Integer.MAX_VALUE;
    }
}
int minLen[] = new int[n+1];
int visit[] = new int[n+1];
for (int i = 1; i < n+1; i++) {
    minLen[i] = path[1][i];
}

n为顶点个数。那么path[i][j]即为i和j之间的距离。初始化时声明为无穷大。
path[1][2] = path[2][1] = 1;
path[1][4] = path[4][1] = 2;
.......
输入数据时,如果有距离就更新。
minLen[]表示的是从1到其他边的距离。
visit[] 表示该点是否被访问过,这样可以防止走回头路。
1、初始顶点为s = 1。
minLen[s] = 0; 初始顶点到自己本身的距离为0;
minLen[2] = path[s][2] = 2;
minLen[3] = path[s][3] = 3;
minLen[4] = path[s][4] = 2;
minLen[5] = path[s][5] = 2;
找到和初始点s距离最短的顶点,这里为2,4,5,可以选取任意一个,这里我们选2。
2、选2结束以后。
visit[2] = 1;
minLen[s] = 0;//已访问,不更新
minLen[2] = path[1][2] = 2;//已访问,不更新
minLen[3] = path[1][3] = 1;// minLen[3] = 3 比 path[2][3] = 1大,更新为1;
minLen[4] = path[1][4] = 2;// minLen[4] = 2 比 path[2][4] 小,不更新;
minLen[5] = path[1][5] = 2;// minLen[5] = 2. 比 path[2][5] = Integer.MAXVALUE小,不更新;
3、不断更新。最后成为这样一棵树

就是最后的结果。距离最小为7。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

最小生成树:Prim算法

最小生成树(MST)——Prim算法

一个无向图的最小生成树由该无向图的那些连接相互连接的顶点的边构成的树,且使得该树的所有边的总权值和最小。最小生成树问题在实际生活中也广泛存在,例如:要在一个村庄修建一条公路,连通到村里的每户人家,选择...

最小生成树(Prim算法)

最小生成树 Prim算法

实现最小生成树的代码

prim算法最小生成树

  • 2008-02-19 11:11
  • 31KB
  • 下载

最小生成树之prim算法

最小生成树之prim算法 边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。    最小生成树(MST):权值最小的生成树。    生成树和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)