建立通信网络(2)

2025-06-26

int main(void)//主函数 { MGraph *G; G = (MGraph*)malloc(sizeof(MGraph)); if (G == NULL) { printf(\ exit(1); } CreatGraph(G); MiniSpanTree(G); system(\ return 0; }

主函数通过调用不同的函数模块来实现的功能 ·········································································· 以下是函数关系的调用图

Main( )

________________________________

CreatGraph() MiniSpanTree( ) ________________

Sort ( ) Find( )

Swapn( )

4.调试分析

1由于对函数调用关系不是非常清楚,导致在程序设计的时候思路不是非常的清晰 2该程序只能满足图顶点比较少的最小生成树的实现,如果用户要求更大的空间,可以在创建图的时候开辟更大的空间。

3在程序输入的时候,必须顶点数值小的先输入,否则程序将会出错。这也是程序应该改进的地方。 4算法的时空分析

1,对矩阵的初始化,设输入一个n个顶点的图,那个将要对矩阵的nxn个元素进行初

始化,所以时间复杂度为O(N2)

2,输入权值和边的时间复杂度为O(n),所以构建图的时间复杂度为O(N2+N) 3.矩阵输出的时间复杂度为O(N2) 。空间复杂度为S(N2)

4在求最小生成树函数中,对边进行标记的时间复杂度为O(N2)。对权值进行排序的时间复杂度为O(N2),对parent数组赋值的时间复杂度为o(n),所以该函数的时间复杂度为O(2N2+N)

5 过这次课程设计,一方面我加深对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择和应用、算法的设计和时空分析等课程基本内容的理解,另一方面,使我在序设计方法(如抽象数据类型、结构化分析、模块化设计和结构化设计)、C语言程序调试和测试方面受到比较系统的严格的训练。

5.用户使用说明

1,输入图的顶点数和边数

2任意输入两个图中连接的顶点 3输入这两个顶点的权值 具体步骤图如下

输入完数据之后,按enter键将会显示以下结果

最后按任意键退出,可以进行其他图最小生成树的实现

6.测试结果

这里提供其他几组测试数据:

输入的数据: 输出数据

输入数据: 输出数据:

7.附录;源程序

#include #include #define M 20 #define MAX 20

typedef struct { int begin; //头顶点 int end; //末顶点 int weight; //权值 }edge;

typedef struct { int adj; int weight;//权值

}AdjMatrix[MAX][MAX];

typedef struct { AdjMatrix arc; int vexnum, arcnum;//顶点 弧 }MGraph;

//函数申明 void CreatGraph(MGraph *); //图构建 void sort(edge* ,MGraph *); //权值排序

void MiniSpanTree(MGraph *); //生成最小树 int Find(int *, int );// 尾顶点查找

void Swapn(edge *, int, int);//权值、头顶点、尾顶点交换 void CreatGraph(MGraph *G)//构件图 { int i, j,n, m; printf(\请输入边数和顶点数:\\n\ scanf(\

for (i = 1; i <= G->vexnum; i++)//初始化图 { for ( j = 1; j <= G->vexnum; j++) { G->arc[i][j].adj = G->arc[j][i].adj = 0; }

} for ( i = 1; i <= G->arcnum; i++)//输入边和权值 { printf(\请输入有边的2个顶点\\n\ scanf(\ while(n < 0 || n > G->vexnum || m < 0 || n > G->vexnum) { printf(\输入的数字不符合要求 请重新输入:\\n\ scanf(\ } G->arc[n][m].adj = G->arc[m][n].adj = 1; getchar(); printf(\请输入%d与%d之间的权值:\\n\ scanf(\ } printf(\邻接矩阵为:\\n\ for ( i = 1; i <= G->vexnum; i++) { for ( j = 1; j <= G->vexnum; j++) { printf(\ } printf(\ } }

void sort(edge edges[],MGraph *G)//对权值进行排序 { int i, j; for ( i = 1; i < G->arcnum; i++) { for ( j = i + 1; j <= G->arcnum; j++) { if (edges[i].weight > edges[j].weight) { Swapn(edges, i, j); } } }


建立通信网络(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2024年高考试题分类汇编:导数(文) - 图文

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219