标签:style blog http 使用 strong 数据
克鲁斯卡尔算法:辅助数组为:
3.第二次循环,会将3---5纳入生成树集合:
辅助数组为:
4.如此再循环两次:
辅助数组:
此时,再准备下次循环时,对应的是边集数组的第四组:
计算find(0)=5,find(3)=5,即m==n,形成了环,所以被舍去!直到遇到边集数组第六组时才不会形成环。最终生成树为:
实现:
/******************************************* 最小生成树之克鲁斯卡尔算法 by Rowandjj 2014/7/9 *******************************************/ #include<iostream> using namespace std; #define MAX_VERTEX_NUM 20//最大顶点数 typedef struct _EDGE_ { int begin;//起始点序号 int end;//终点序号 int weight;//权值 }Edge[MAX_VERTEX_NUM];//边集数组 typedef struct _GRAPH_ { Edge edge;//边集数组 int numVertiexs;//顶点数 int numEdges;//边数 }Graph;//图存储结构--->边集数组结构 //------------------------------------------ void CreateGraph(Graph* g);//构建有权无向图g void Display(Graph g);//输出图g的相关信息 int Find(int *parent,int f); void MiniSpanTree_Kruskal(Graph g);//最小生成树之克鲁斯卡尔算法 //------------------------------------------ void CreateGraph(Graph* g) { int i; cout<<"输入顶点数、边数:"; cin>>g->numVertiexs; cin>>g->numEdges; cout<<"按权值从小到大顺序输入每条边的两个顶点及权值:"<<endl; //初始化边集数组 for(i = 0; i < g->numEdges; i++) { cin>>g->edge[i].begin; cin>>g->edge[i].end; cin>>g->edge[i].weight; } } void Display(Graph g) { cout<<"顶点数:"<<g.numVertiexs<<" 边数:"<<g.numEdges<<endl; cout<<"打印各边信息:"<<endl; for(int i = 0; i < g.numEdges; i++) { cout<<g.edge[i].begin<<"---->"<<g.edge[i].end<<" : "<<g.edge[i].weight<<endl; } } int Find(int *parent,int f) { while(parent[f] > 0) { f = parent[f]; } return f; } void MiniSpanTree_Kruskal(Graph g)//最小生成树之克鲁斯卡尔算法 { int i; int m,n; int parent[MAX_VERTEX_NUM];//定义辅助数组,用来判断边与边之间是否存在环路 //1.初始化辅助数组 for(i = 0; i < g.numVertiexs; i++) { parent[i] = 0; } //2.计算最小生成树 for(i = 0; i < g.numEdges; i++) { n = Find(parent,g.edge[i].begin); m = Find(parent,g.edge[i].end); if(n != m)//如果没有形成c环,那么输出 { parent[n] = m;//表示此顶点已经在生成树集合中 cout<<g.edge[i].begin<<"--->"<<g.edge[i].end<<" : "<<g.edge[i].weight<<endl; } } } //------------------------------------------ int main() { Graph g; CreateGraph(&g); Display(g); cout<<"\n最小生成树如下\n"<<endl; MiniSpanTree_Kruskal(g); return 0; }测试:
标签:style blog http 使用 strong 数据
原文地址:http://blog.csdn.net/chdjj/article/details/37602723