标签:
从边考虑,
给一些输入,
9 15
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define MAXEDGE 100
#define MAXVEX 100
#define INFINITY 65535
using namespace std;
typedef struct Edge{
	int begin;
	int end;
	int weight;
	bool operator < (const struct Edge &a)const{	//排序,sort。。c++的,忘了 
		return weight<a.weight;
	}
}Edge;
typedef struct {
    Edge edges[MAXVEX];
    int numVextexes,numEdges;
}MGraph;
void CreateGraph(MGraph *G){	//c创建图 
    int i,j,k,w;
    printf("输入顶点数和边数:\n");
    scanf("%d %d",&j,&k);
    G->numEdges = k;
    G->numVextexes = j;
    for(i=0;i<G->numEdges;i++){
    	scanf("%d %d %d",&G->edges[i].begin,&G->edges[i].end,&G->edges[i].weight);
	}
	sort(G->edges,G->edges+G->numEdges);
    return;
}
int Find(int *parent,int f){	//介个.....类似并查集 
	while(parent[f] > 0){
		f = parent[f];
	}
	return f;
}
void MiniSpanTree_Kruskal(MGraph G){
	int i,n,m;
	CreateGraph(&G);
	int parent[MAXVEX];
	for(i=0;i<G.numVextexes;i++){
		parent[i] = 0;
	}
	
	for(i=0;i<G.numEdges;i++){
		n = Find(parent,G.edges[i].begin);
		m = Find(parent,G.edges[i].end);
		if(n!=m){	//回路? 
			parent[n] = m;
			printf("(%d,%d),%d   ",G.edges[i].begin,G.edges[i].end,G.edges[i].weight);
		}
	}
}
int main(){
	MGraph G;
    MiniSpanTree_Kruskal(G);
	return 0;
}
标签:
原文地址:http://www.cnblogs.com/zhuozhuo/p/5409192.html