图及其应用实验报告 c语言,图的应用 实验报告
实验六 图的应用
一、实验目的
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语言,图的应用 实验报告相关推荐
- C语言程序设计上机实验教程,C语言程序设计教程-上机实验报告
C语言程序设计教程-上机实验报告 <高级语言程序设计> 实验指导 学 院:信息科学与技术学院 专 业: 学 期: 教 师: 实验6 函数与编译预处理 院(系):信息科学与技术学院课程名称: ...
- c语言des算法实验报告,C语言实现DES算法实验报告解析.doc
C语言实现DES算法实验报告解析 xx工程大学 实验报告 (2015-2016学年第一学期) 报告题目: DES加密算法 课程名称: 密码学B 任课教员: 专 业: 学 号: 姓 名: 二O一六年一月 ...
- c语言工程合并报告,C语言《数据结构》实验报告】链表的合并
<C语言<数据结构>实验报告]链表的合并>由会员分享,可在线阅读,更多相关<C语言<数据结构>实验报告]链表的合并(8页珍藏版)>请在人人文库网上搜索. ...
- 流水灯实验报告c语言,PLC流水灯实验报告.pdf
PLC流水灯实验报告 基于WinPAC 的流水灯实验 实验目的 1.掌握PLC编程的基本流程,学会在ISaGRAF环境下编程和仿真. 2.学会在ISAGRAF创建工程.下载程序.调试方法. 3.掌握L ...
- 最小生成树实验报告c语言,算法与程序设计实验最小生成树(c语言).ppt
算法与程序设计实验最小生成树(c语言).ppt 最小生成树 问题分析: 由于在每两个城市之间都可以建立一条通信线路,n个城市之间最多可能设置n(n-1)/2条线路,而每条线路都要付出一定的经济代价,因 ...
- 秒表设计实验报告C语言,电子秒表设计实验报告
<电子秒表设计实验报告>由会员分享,可在线阅读,更多相关<电子秒表设计实验报告(10页珍藏版)>请在人人文库网上搜索. 1.精选文档 -淮阴工学院数字电子技术课程实验期末考核2 ...
- 银行家算法实验报告c语言版,银行家算法实验报告C语言版.doc
<操作系统>课程综合性实验报告 姓名: 学号: 2016 年 11 月 20 日 实验题目进程调度算法程序设计一.实验目的 通过对安全性算法和银行家算法的模拟,进一步理解资源分配的基本概念 ...
- c语言课题设计字符串处理函数报告,C语言输入输出库函数设计实验报告.doc
C语言输入输出库函数设计实验报告 第 PAGE \* MERGEFORMAT I页 共 SECTIONPAGES \* MERGEFORMAT 1页 华中科技大学计算机科学与技术学院 C语言课程设计报 ...
- c语言复数的运算实验报告,C语言复数的运算实验报告.doc
C语言复数的运算实验报告 实验报告 题目:复数的四则运算 班级: 13信管 姓名:白浩然 学号:201340403034 完成日期:2014.05.21 一.需求分析 1.本演示程序中复数由两个相互之 ...
- c语言循环结构程序设计实验报告,c语言循环结构程序设计实验报告
c语言循环结构程序设计实验报告 云南大学数学与统计学实验教学中心实验报告课程名称:程序设计和算法语言 学期: 2012~2013 学年下学期 成绩:指导教师: 学生姓名: 学生学号实验名称:循环结构程 ...
最新文章
- 互联网时代下,看租赁电商如何玩转消费金融
- linux socket bind 内核详解,Socket与系统调用深度分析(示例代码)
- WakaTime 记录你的时间(Moana 自动同步信息客户端)
- 数学建模学习笔记(十二)——奇异值分解
- python利用numpy存取文件
- go路由httprouter中的压缩字典树算法图解及c++实现
- 深入解读Linux进程调度系列——数据结构解析
- iOS端Mock GPS定位 —— 测试、开发、玩游戏、发朋友圈等等,你都用得上
- 这五大基础原理,总是牛逼的无话可说
- 思科华为网络工程师必修-什么是VTP,vlan同步技术。
- TLC固态硬盘暴力读写寿命测试
- Keras : 训练minst数据集并加载模型对本地手写图片进行预测
- EXCEL中如何让某些行列固定不动
- 技术人生的职场众生相
- 一个完整的URL地址包含什么
- 事理图谱,下一代知识图谱
- 记录前端常用代码规范
- JD狗东邀新活动余额兑换软件及使用教程
- 三星530换固态硬盘_三星迷你固态硬盘Portable SSD T7 Touch试用 支持指纹识别设备...
- 计算机网络基础知识--应用层协议HTTP、FTP、SMTP
热门文章
- 【2022最新Java面试宝典】—— TCP,UDP,Socket,Http网络编程面试题(47道含答案)
- 三极管原理-导通条件
- php三极管导通条件,三极管的导通条件 - 三级管饱和导通的条件是什么?
- 玩转Mixly – 1、Mixly图形化编程工具介绍
- NCU SEM 发文检索2015年
- probability是什么意思_概率(Probability)的本质是什么?
- php 颜值测试源码,微软小冰颜值测试PHP最新代码
- 数电技术基础大恶补04:CMOS门电路
- HttpServletRequest--request.getParameter /getParameterValues/getParameterNames()/getParameterValues
- 屏幕录像专家 7.5下载+注册机