Minimum Spanning Tree

Source: Internet
Author: User
Input 
The first line of the input contains a positive integer N, indicating that there are n vertices in the graph. N cannot exceed 50. There are n integers separated by spaces in each row in the next n rows. For the J integer of row I, if it is not 0, it indicates that vertex I and vertex J are directly connected and the cost is the corresponding value. 0 indicates no direct connection. When I and j are equal, make sure that the corresponding integer is 0. The input ensures that the adjacent matrix is a symmetric matrix, that is, the input graph is an undirected graph, and the graph only has one connected component. 
Output 
There is only one integer, that is, the total cost of the Minimum Spanning Tree. Note the line feed at the end of the line. 
Sample Input 
4 0 2 4 0 2 0 3 4 3 0 1 0 5 1 0 
Sample output 
6 

1 # include <stdio. h> 2 # define N 55 3 # define INF 600000 4 # define inf2 600001 5 typedef struct G {6 int arc [N] [N]; 7 int arcnum, vernum; 8 int maxweight; 9} graph; 10 typedef struct {11 int adjvex; 12 INT lowcost; 13} closedge; 14 void create (graph * g, int N) {15 int I, j; 16g-> vernum = G-> arcnum = N; 17G-> maxweight = 0; 18 for (I = 0; I <G-> arcnum; I ++) 19 for (j = 0; j <G-> arcnum; j ++) {20 scanf ("% d", & G-> RC [I] [J]); 21 if (G-> maxweight <G-> arc [I] [J]) 22g-> maxweight = G-> arc [I] [J]; 23} 24} 25 void prim (graph * g, Int & spent) {26 closedge [N]; 27 int I, J, K, Min, minver; 28 // initialization array closedge29 for (I = 0; I <G-> vernum; I ++) {30 closedge [I]. adjvex = 0; // 31 from node 0 if (G-> arc [0] [I]) 32 closedge [I]. lowcost = G-> arc [0] [I]; 33 else34 closedge [I]. lowcost = inf; 35} 36 37 closedge [0]. lowcost = inf2; 38 39 for (j = 0; J <G-> vernum-1; j ++) {40 min = G-> maxweight; 41 // select the smallest side 42 for (k = 0; k <G-> vernum; k ++) 43 If (closedge [K]. lowcost & min> closedge [K]. lowcost) {44 min = closedge [K]. lowcost; 45 minver = K; // closedge [K]. adjvex46} 47 spent + = min; 48 closedge [minver]. lowcost = inf2; // Add the selected set 49 // find the vertex minver to the "cost" minver = 1; 50 for (k = 0; k <G-> vernum; k ++) {51 if (closedge [K]. lowcost! = Inf2 & G-> arc [minver] [k] <closedge [K]. lowcost & G-> arc [minver] [k]) {52 closedge [K]. adjvex = K; 53 closedge [K]. lowcost = G-> arc [minver] [k]; 54} 55} 56} 57} 58 int main () {59 int N; 60 graph G; 61 scanf ("% d", & N); 62 create (& G, n); 63 int m = 0; 64 prim (& G, M ); 65 printf ("% d \ n", m); 66 return 0; 67}

 

Minimum Spanning Tree

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.