zoukankan      html  css  js  c++  java
  • MST2(prim)

    Prim

    算法的时间为:O(V lgV +E lgV )=O(E lgV )。
    ➢ 从渐进意义上看,Kruskal和Prim算法具有相同的运行时间。

    代码

    /*
    *二维数组graph[V][V]记录图
    *通过维护一维数组key[V],其含义为:
    *当前MST到第i个点的所有边中,权重最小为key[i]。
    *每次加入一维数组key[V]中值最小的点
    */
    #include<limits.h>
    #include<stdbool.h>
    #include<stdio.h>
    
    #define V 5
    
    int minKey(int key[], bool mstSet[]) {
    	int min = INT_MAX;
    	int min_index;
    	for (int v = 0; v < V; v++) {
    		//printf("%d ", key[v]);
    		if (mstSet[v] == false && key[v] < min) {
    			min = key[v];
    			min_index = v;
    		}
    	}
    	//printf("
    ");
    	return min_index;
    }
    
    void printMST(int parent[], int graph[V][V]) {
    	printf("Edge 	Weight
    ");
    	for (int i = 1; i < V; i++) {
    		printf("%d -> %d 	%d 
    ", parent[i], i, graph[i][parent[i]]);
    	}
    }
    
    void primMST(int graph[V][V]) {
    	int parent[V];            //MST中的边:parent[i]-->i
    	int key[V];		//最小切割
    	bool mstSet[V];		//点是否在MST中
    
    	for (int i = 0; i < V; i++) {
    		key[i] = INT_MAX;
    		mstSet[i] = false;
    	}
    	key[0] = 0;		//0节点为MST根
    	parent[0] = -1;
    	/*-----核心结构-----*/
    	for (int count = 0; count < V - 1; count++) {
    		int u = minKey(key, mstSet);
                     //加入新点
    		mstSet[u] = true;
                      //维护数组key[]
    		for (int v = 0; v < V; v++) {
    			if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v]) {
    				parent[v] = u;
    				key[v] = graph[u][v];
    			}
    		}
    	}
    	/*---------------*/
    
    	printMST(parent, graph);
    }
    
    int main() {
                //一个栗子
    	int graph[V][V] = { {0,2,0,6,0},
    						{2,0,3,8,5},
    						{0,3,0,0,7},
    						{6,8,0,0,9},
    						{0,5,7,9,0} };
    	primMST(graph);
    	return 0;
    }
    
  • 相关阅读:
    Windows下Goland的Terminal设置为Git Bash
    BoltDB简单使用教程
    Base64编码转换原理
    [区块链|非对称加密] 对数字证书(CA认证)原理的回顾
    [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析
    升级mojave后的小问题解决
    ubuntu安装ssh服务记录
    dubbo+maven多模块项目单元测试
    sass与less
    (转)初识 Lucene
  • 原文地址:https://www.cnblogs.com/CSE-kun/p/13972819.html
Copyright © 2011-2022 走看看