4.实际问题及其解决
现有:重庆大学,西南大学,西南政法大学,重庆师范大学,重庆邮电大学5所高校,要求把他们的校内网进行互联,以组建一个更大的校园网络。在发费最少的情况下进行光缆的铺设。
根据实际测量地图的得到的各学校之间的直线距离图:
由于每公里光缆造价相同,故可以用实际距离代替造价作为权重。 实际情况缩略图:
设:重庆邮电大学V1
重庆大学V2 重庆师范大学V3 西南大学V4 西南政法大学V5 输入程序运行得到结果:
解决问题得到结果:
5.总结
通过对prim算法编写的C程序我们可以轻易地得到在发费最少的情况下进行光缆的铺设的路径。这大大的节约了成本和时间,是对实际问题的一次生动尝试。同时这个程序也可以进行相应的改善和推广,以利于我们的工作实践。
参考文献
【1】《图论及其算法》,殷剑宏等,中国科学技术大学出版社。 【2】《C语言程序设计》(第三版),谭浩强,清华大学出版社。 【3】《数据结构》(C语言版),严蔚敏 吴伟民,清华大学出版社。
程序
#include \#define maxnum 10 #define maxvalue 88
typedef struct //定义存放各节点间边的权值的二位数组为新的数据类型可称为图 {
int v[maxvalue][maxvalue];
} mgraph; //该数据类型用标识符mgraph表示
mgraph input(int n) //数据输入函数用于输入各节点间边的权值 { 操作
if(i==j) //各节点到自身的权重赋为0
x.v[i][j]=0;
mgraph x; //定义x为mgraph类型
while(n<=0||n>maxnum) //控制输入出错重新执行 {
printf(\输入有误,请重新输入:\
scanf(\}
for(int i=1;i<=n;i++) //双层循环控制每个节点到其他各节点的权值 {
for(int j=0;j<=n;j++) {
int temp; //定义临时变量用于存放输入权值便于接下的过滤
else
if(i