<span style="font-size:18px;">简单的prime 算法 主要的就是三个部分。一 用dist来记录值,二 找dist 里的最小值,三 更新dist里的值。
所以要写prime算法 要抓住这三个点来写,就能减少错误。(visit用来标记,在判断条件的时候不要忘了)
#include
#include
#define INT_MAX 1000000
#define MAXN 100
int visit[MAXN] ;
int map[MAXN][MAXN] ;
int dist[MAXN] ;
int n , e ;
int prime (int start)
{
int i ,j ;
memset(visit , -1 ,sizeof(visit)) ;
//用dist来保存与start有连接的边上的值
for(i = 1 ; i<=n ; i++)
dist[i] = map[start][i] ;
dist[start] = 0 ;
visit[start] = 1 ;
for(j = 1 ; j <= n-1 ;j++){//要循环n-1次
int result = 0 ;
int min = dist[start] ;
int flag ;
//找到dist里的最小值 用min记录,用flag 保存位置
for(i = 1 ; i <= n ; i++){
if(visit[i] < 0 && min > dist[i])
min = dist[i] ;
flag = i ;
}
result += min ;
visit[flag] = 1 ;
for(i = 1 ; i <= n ; i++ ){
if(visit[i] < 0 && dist[i] > map[flag][i])
dist[i] = map[flag][i] ;
}
}
return result ;
}
int main()
{
int i , j ;
scanf("%d%d" , &n , &e) ;
//把连接矩阵里的权值都付值为无穷大
memset(map , INT_MAX , sizeof(map)) ;
//输入各个顶点的信息 ,两个顶点之间的 权值
int v , u ;
for(i = 1 ; i <= e ; i++ )
{
scanf("%d%d%d", &v , &u , &map[v][u]);
}
printf( "%d\n" . prime(1) ) ;
return 0;
}
</span>
Algorithm 最小生成树 prime算法
最新推荐文章于 2020-01-10 17:07:19 发布