资源简介
输入无向图的邻接矩阵,使用Prim 算法、Kruskal 算法和去边法三种算法求该图的最小代价生成树,并分析各自的时间复杂度。
代码片段和文件信息
///Coded by LC 2014/12/26///
#include“iostream“
#include“cstdlib“
#include“limits.h“
#include“string“
#define INFINITY INT_MAX
#define MAX_VERTEX_NUM 20
using namespace std;
int Vexnum;
typedef struct{
int vexnum;
long arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
}MGraph;
////////////////////////////////////////////////
void CreateMGraph(MGraph*);
void Create(MGraph*);
void MiniSpanTree_PRIM(MGraph*MGraph*int);
void Print(MGraph*);
void MiniSpanTree_KRUSKAL(MGraph*MGraph*);
void Copy(MGraph*MGraph*);
void PathJudge(MGraph*intintint*int []);
void MiniSpanTree_CircleDestroy(MGraph*MGraph*);
int Find(int*int []int []MGraph*);
void findMax(int []intintint*int*MGraph*);
////////////////////////////////////////////////
int main()
{
cout<<“Please input the number of the vertices:“;
cin>>Vexnum;
MGraph GG1G2G3;
CreateMGraph(&G);
CreateMGraph(&G1);
CreateMGraph(&G2);
CreateMGraph(&G3);
Create(&G);
cout<<“PRIM“< MiniSpanTree_PRIM(&G&G10); Print(&G1);
cout<<“KRUSKAl“< MiniSpanTree_KRUSKAL(&G&G2); Print(&G2);
cout<<“CircleDestroy“< MiniSpanTree_CircleDestroy(&G&G3); Print(&G3);
system(“pause“);
return 0;
}
////////////////////////////////////////////////
void CreateMGraph(MGraph* G)
{
(*G).vexnum=Vexnum;
for(int i=0;i for(int j=0;j (*G).arcs[i][j]=INFINITY;
}
void Create(MGraph* G)
{
cout<<“Please input the matrix(use -1 to represent INFINITY)“< int m;
for(int i=0;i for(int j=0;j cin>>m;
if(m>0)
(*G).arcs[i][j]=m;
else
(*G).arcs[i][j]=INFINITY;
}
}
////////////////////////////////////////////////
void MiniSpanTree_PRIM(MGraph* GMGraph* G1int u)
{
struct
{
int adjvex;
int lowcost;
}closedge[Vexnum];
int k;
for(int i=0;i if(i!=u)
{
closedge[i].adjvex=u;
closedge[i].lowcost=(*G).arcs[u][i];
}
closedge[u].lowcost=0;
for(int i=1;i {
long min=INFINITY;
for(int m=0;m {
if(closedge[m].lowcost>0&&closedge[m].lowcost {
min=closedge[m].lowcost;
k=m;
}
}
(*G1).arcs[closedge[k].adjvex][k]=(*G1).arcs[k][closedge[k].adjvex]=(*G).arcs[k][closedge[k].adjvex];
closedge[k].lowcost=0;
for(int j=0;j {
if((*G).arcs[k][j] {
closedge[j].adjvex=k;
closedge[j].lowcost=(*G).arcs[k][j];
}
}
}
}
void Print(MGraph* G)
{
cout<<“The minispantree:“< for(
- 上一篇:递归下降法翻译if then条件语句
- 下一篇:服装销售系统(c语言作业版)
相关资源
- 思维导图(C++ Primer Plus(第六版).
- C++_Primer_4th_习题答案
- C++ Primer by Stanley B. Lippman Josée La
- C++ Primer mobi
- 经典书籍《C++ Primer Plus 第6版 》 中文
- C++ Primer习题集 第5版.高清版
- c++ Primer199380
- primerc++书店项目
- C++primer第四版清晰版电子书及全部答
- c++-primer-plus(第六版)-编程练习答案
- C++ Primer中文第五版.zip
- C++ Primer 第五版 中文版+英文版+习题集
- C++ primer 第三版习题答案
- C++ Primer习题集 第5版-Stanley B. Lippman
- C++ Primer 第五版 中文版+英文版 pdf
- C++ Primer(5th)2017Edition 无水印pdf
- 用“破圈法”求解带权连通无向图的
- VC++2012版Prim算法最小生成树动态演示
- 数据结构 图的最小生成树 C++描述 使
- C++ Primer 3rd 英文版
- [C语言] C Primer Plus 第6版 (英文版)
- C++ Primer139296
- C++ Primer Plus英文版第六版.pdf
- 数据结构课程设计,最小生成树,采
- 免费:C++ Primer Plus 6th Edition英文版p
- C++ primer中文版
- C++Primer课后习题解答(第1~18章完整答
- c++ primer 4th answer完整版
- C++ Primer第四版中文高清非扫描版
- C++Primer中文版(第4版)
评论
共有 条评论