实验六 图的应用

一、实验目的

1、使学生可以巩固所学的有关图的基本知识。

2、熟练掌握图的存储结构。

3、掌握如何应用图解决各种实际问题。

二、实验内容

本次实验提供2个题目,学生可以任选一个!

题目一:最小生成树问题

[问题描述]

若要在n 个城市之间建设通信网络,只需要假设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题。

[基本要求]

1.利用克鲁斯卡尔算法求网的最小生成树。

2.要求输出各条边及它们的权值。

[实现提示]

通信线路一旦建成,必然是双向的。因此,构造最小生成树的网一定是无向网。设图的顶点数不超过30个,并为简单起见,网中边的权值设成小于100的整数。

图的存储结构的选取应和所作操作相适应。为了便于选择权值最小的边,此题的存储结构既不选用邻接矩阵的数组表示法,也不选用邻接表,而是以存储边(带权)的数组表示图。

三、实验前的准备工作

1、掌握图的相关概念。

2、掌握图的逻辑结构和存储结构。

3、掌握图的各种应用的实现。

四、实验报告要求

1、实验报告要按照实验报告格式规范书写。

2、实验上要写出多批测试数据的运行结果。

3、结合运行结果,对程序进行分析。

五、程序代码

#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("请输入边数和顶点数:");

scanf("%d %d",&G->arcnum,&G->vexnum);

for (i = 1; i vexnum; i++)

{

for ( j = 1; j vexnum; j++)

{

G->arc[i][j].adj = G->arc[j][i].adj = 0;

}

}

for ( i = 1; i arcnum; i++)

{

printf("\n请输入有边的2个顶点");

scanf("%d %d",&n,&m);

while(n G->vexnum || m G->vexnum)

{

printf("输入的数字不符合要求 请重新输入:");

scanf("%d%d",&n,&m);

}

G->arc[n][m].adj = G->arc[m][n].adj = 1;

getchar();

printf("\n请输入%d与%d之间的权值:", n, m);

scanf("%d",&G->arc[n][m].weight);

}

printf("邻接矩阵为:\n");

for ( i = 1; i vexnum; i++)

{

for ( j = 1; j vexnum; j++)

{

printf("%d ",G->arc[i][j].adj);

}

printf("\n");

}

}

void sort(edge edges[],MGraph *G)

{

int i, j;

for ( i = 1; i arcnum; i++)

{

for ( j = i + 1; j arcnum; j++)

{

if (edges[i].weight > edges[j].weight)

{

Swapn(edges, i, j);

}

}

}

printf("权排序之后的为:\n");

for (i = 1; i arcnum; i++)

{

printf("> %d\n",

edges[i].weight);

}

}

void Swapn(edge *edges,int i, int j)

{

int temp;

temp = edges[i].begin;

edges[i].begin = edges[j].begin;

edges[j].begin = temp; edges[i].begin, edges[i].end,

temp = edges[i].end;

edges[i].end = edges[j].end;

edges[j].end = temp;

temp = edges[i].weight;

edges[i].weight = edges[j].weight;

edges[j].weight = temp;

}

void MiniSpanTree(MGraph *G)

{

int i, j, n, m;

int k = 1;

int parent[M];

edge edges[M];

for ( i = 1; i vexnum; i++)

{

for (j = i + 1; j vexnum; j++)

{

if (G->arc[i][j].adj == 1)

{

edges[k].begin = i;

edges[k].end = j;

edges[k].weight = G->arc[i][j].weight;

k++;

}

}

}

sort(edges, G);

for (i = 1; i arcnum; i++)

{

parent[i] = 0;

}

printf("最小生成树为:\n");

for (i = 1; i arcnum; i++)

{

n = Find(parent, edges[i].begin);

m = Find(parent, edges[i].end);

if (n != m)

{

parent[n] = m;

printf("> %d\n",

edges[i].weight);

}

}

}

int Find(int *parent, int f)

{

while ( parent[f] > 0)

{

f = parent[f];

}

return f;

}

int main(void)

{

MGraph *G;

G = (MGraph*)malloc(sizeof(MGraph));

if (G == NULL)

{

printf("memory allcation failed,goodbye");

exit(1);

}

CreatGraph(G);

MiniSpanTree(G);

system("pause");

return 0;

} edges[i].begin, edges[i].end,

六、程序测试结果

七、总结

通过做这次实验,发现自己在数据结构这方面有台多的不足,所以在写程序的时候出现了很多的错误,及还有很多的知识不以灵活运用。由于C++没有掌握好,再加上数据结构没有学好,做本次实验还是吃力,刚开始非常吃力,后来经过查找资料,在自己的努力下和同学的帮助下,终于完了本次实验,此次实验发现的自己的不足,在以后,我会好好学习,上课认真听讲,弥补知识的不足。

图及其应用实验报告 c语言,图的应用 实验报告相关推荐

  1. C语言程序设计上机实验教程,C语言程序设计教程-上机实验报告

    C语言程序设计教程-上机实验报告 <高级语言程序设计> 实验指导 学 院:信息科学与技术学院 专 业: 学 期: 教 师: 实验6 函数与编译预处理 院(系):信息科学与技术学院课程名称: ...

  2. c语言des算法实验报告,C语言实现DES算法实验报告解析.doc

    C语言实现DES算法实验报告解析 xx工程大学 实验报告 (2015-2016学年第一学期) 报告题目: DES加密算法 课程名称: 密码学B 任课教员: 专 业: 学 号: 姓 名: 二O一六年一月 ...

  3. c语言工程合并报告,C语言《数据结构》实验报告】链表的合并

    <C语言<数据结构>实验报告]链表的合并>由会员分享,可在线阅读,更多相关<C语言<数据结构>实验报告]链表的合并(8页珍藏版)>请在人人文库网上搜索. ...

  4. 流水灯实验报告c语言,PLC流水灯实验报告.pdf

    PLC流水灯实验报告 基于WinPAC 的流水灯实验 实验目的 1.掌握PLC编程的基本流程,学会在ISaGRAF环境下编程和仿真. 2.学会在ISAGRAF创建工程.下载程序.调试方法. 3.掌握L ...

  5. 最小生成树实验报告c语言,算法与程序设计实验最小生成树(c语言).ppt

    算法与程序设计实验最小生成树(c语言).ppt 最小生成树 问题分析: 由于在每两个城市之间都可以建立一条通信线路,n个城市之间最多可能设置n(n-1)/2条线路,而每条线路都要付出一定的经济代价,因 ...

  6. 秒表设计实验报告C语言,电子秒表设计实验报告

    <电子秒表设计实验报告>由会员分享,可在线阅读,更多相关<电子秒表设计实验报告(10页珍藏版)>请在人人文库网上搜索. 1.精选文档 -淮阴工学院数字电子技术课程实验期末考核2 ...

  7. 银行家算法实验报告c语言版,银行家算法实验报告C语言版.doc

    <操作系统>课程综合性实验报告 姓名: 学号: 2016 年 11 月 20 日 实验题目进程调度算法程序设计一.实验目的 通过对安全性算法和银行家算法的模拟,进一步理解资源分配的基本概念 ...

  8. c语言课题设计字符串处理函数报告,C语言输入输出库函数设计实验报告.doc

    C语言输入输出库函数设计实验报告 第 PAGE \* MERGEFORMAT I页 共 SECTIONPAGES \* MERGEFORMAT 1页 华中科技大学计算机科学与技术学院 C语言课程设计报 ...

  9. c语言复数的运算实验报告,C语言复数的运算实验报告.doc

    C语言复数的运算实验报告 实验报告 题目:复数的四则运算 班级: 13信管 姓名:白浩然 学号:201340403034 完成日期:2014.05.21 一.需求分析 1.本演示程序中复数由两个相互之 ...

  10. c语言循环结构程序设计实验报告,c语言循环结构程序设计实验报告

    c语言循环结构程序设计实验报告 云南大学数学与统计学实验教学中心实验报告课程名称:程序设计和算法语言 学期: 2012~2013 学年下学期 成绩:指导教师: 学生姓名: 学生学号实验名称:循环结构程 ...

最新文章

  1. 互联网时代下,看租赁电商如何玩转消费金融
  2. linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)
  3. WakaTime 记录你的时间(Moana 自动同步信息客户端)
  4. 数学建模学习笔记(十二)——奇异值分解
  5. python利用numpy存取文件
  6. go路由httprouter中的压缩字典树算法图解及c++实现
  7. 深入解读Linux进程调度系列——数据结构解析
  8. iOS端Mock GPS定位 —— 测试、开发、玩游戏、发朋友圈等等,你都用得上
  9. 这五大基础原理,总是牛逼的无话可说
  10. 思科华为网络工程师必修-什么是VTP,vlan同步技术。
  11. TLC固态硬盘暴力读写寿命测试
  12. Keras : 训练minst数据集并加载模型对本地手写图片进行预测
  13. EXCEL中如何让某些行列固定不动
  14. 技术人生的职场众生相
  15. 一个完整的URL地址包含什么
  16. 事理图谱,下一代知识图谱
  17. 记录前端常用代码规范
  18. JD狗东邀新活动余额兑换软件及使用教程
  19. 三星530换固态硬盘_三星迷你固态硬盘Portable SSD T7 Touch试用 支持指纹识别设备...
  20. 计算机网络基础知识--应用层协议HTTP、FTP、SMTP

热门文章

  1. 【2022最新Java面试宝典】—— TCP,UDP,Socket,Http网络编程面试题(47道含答案)
  2. 三极管原理-导通条件
  3. php三极管导通条件,三极管的导通条件 - 三级管饱和导通的条件是什么?
  4. 玩转Mixly – 1、Mixly图形化编程工具介绍
  5. NCU SEM 发文检索2015年
  6. probability是什么意思_概率(Probability)的本质是什么?
  7. php 颜值测试源码,微软小冰颜值测试PHP最新代码
  8. 数电技术基础大恶补04:CMOS门电路
  9. HttpServletRequest--request.getParameter /getParameterValues/getParameterNames()/getParameterValues
  10. 屏幕录像专家 7.5下载+注册机