• Prim算法


     输入事例:
    7 9
    1 2 28
    1 6 10
    2 3 16
    2 7 14
    3 4 12
    4 5 22
    4 7 18
    5 6 25
    5 7 24

    输出:
    1 6 10
    6 5 25
    5 4 22
    4 3 12
    3 2 16
    2 7 14
    weight if MST is 99



    1
    #include <cstdio> 2 #include <cstring> 3 #define INF 1000000 //无穷大 4 #define MAXN 21 //顶点个数最大值 5 6 int n, m; //顶点个数、边数 7 int Edge[MAXN][MAXN]; //邻接矩阵 8 int lowcost[MAXN]; 9 int nearvex[MAXN]; 10 11 void prim( int u0 ) //从顶点u0出发执行普里姆算法 12 { 13 int i, j; //循环变量 14 int sumweight = 0; //生成树的权值 15 16 for( i=1; i<=n; i++ ) //初始化lowcost数组和nearvex数组 17 { 18 lowcost[i] = Edge[u0][i]; 19 nearvex[i] = u0; 20 } 21 nearvex[u0] = -1; 22 23 for( i=1; i<n; i++ ) 24 { 25 int min = INF; 26 int v = -1; 27 for( j=1; j<=n; j++ ) //在lowcost数组(的nearvex[ ]值为-1的元素中)中找最小值 28 { 29 if( nearvex[j]!=-1 && lowcost[j]<min ) 30 { v = j; min = lowcost[j]; } 31 } 32 if( v!=-1 ) //v==-1,表示没找到权值最小的边 33 { 34 printf( "%d %d %d ", nearvex[v], v, lowcost[v] ); 35 nearvex[v] = -1; 36 sumweight += lowcost[v]; 37 38 for( j=1; j<=n; j++ ) 39 { 40 if( nearvex[j]!=-1 && Edge[v][j]<lowcost[j] ) 41 { 42 lowcost[j] = Edge[v][j]; 43 nearvex[j] = v; 44 } 45 } 46 }//end of if 47 }//end of for 48 printf( "weight of MST is %d ", sumweight ); 49 }//end of prime 50 51 int main( ) 52 { 53 int i, j; //循环变量 54 int u, v, w; //边的起点和终点及权值 55 scanf( "%d%d", &n, &m ); //读入顶点个数n和边数m 56 memset( Edge, 0, sizeof(Edge) ); 57 for( i=1; i<=m; i++ ) 58 { 59 scanf( "%d%d%d", &u, &v, &w ); //读入边的起点和终点 60 Edge[u][v] = Edge[v][u] = w; //构造邻接矩阵 61 } 62 for( i=1; i<=n; i++ ) //对邻接矩阵中其他元素值进行赋值 63 { 64 for( j=1; j<=n; j++ ) 65 { 66 if( i==j ) Edge[i][j] = 0; 67 else if( Edge[i][j]==0 ) Edge[i][j] = INF; 68 } 69 } 70 prim( 1 ); //从顶点1出发构造最小生成树 71 return 0; 72 }
  • 相关阅读:
    AC自动机算法与AC自动机专辑
    hdu 2757 DNA repair AC自动机dp完全不懂
    hdu 3695 AC自动机模板题
    Magic Tree 水dp 错题!
    AC自动机模板
    UVa 10003 Cutting Sticks 区间dp
    hdu 3695 Computer Virus on Planet Pandora AC自动机
    [置顶] AC自动机算法与AC自动机专辑
    Trip 图dp
    利用数据库创建webservice
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/3581002.html
Copyright © 2020-2023  润新知