构造可以使n个城市连接的最小生成树.doc西北农林科技大学信息工程学院
C语言与数据结构实习报告
题目:构造可以使n个城市连接的最小生
成树
学号
2009012841
姓名
孙千翱
专业班级
信管091班
指导教师
王娟勤唐晶磊
实践日期
2010年7月19日-7月30日
目录
一、综合训练目的与要求 3
二、综合训练任务 3
三、总体设计 4
四、详细设计说明 4
五、调试与测试 6
六、实习日志 8
七、实习总结 9
八、附录:核心代码清单 9
一、综合训练目的与要求
按照数据结构、C程序设计教学计划的安排,7月19日到30日,开展为期两周的数据结构与C程序设计课程设计。该课程设计是数据结构、C语言程序设计课程的重要实践教学环节,是一次全面的系统分析与设计能力的培养,是实现该专业学生总体培养目标的重要教学环节。使学生通过了解学科领域的发展动向,培养数据结构与程序设计的基本思想,独立分析和解决实践问题的能力,提高和锻炼学生动手能力。
实习的基本要求
(1)结合实践,学生选题与教师指定题目相结合,老师对题目的合理性、学生分组进行确认;
(2)对所选题目,运用面向过程的分析与设计方法,给出系统分析与设计的结果,要求必须要运用数据结构课程中相关的基本知识;
(3)选择熟悉的开发工具,用C语言完成系统实现和测试,掌握系统实现和测试的方法,必须要有详尽的程序注释;
(4)撰写开发文档,培养编写系统分析与设计文档的水平。
二、综合训练任务
主要任务:
给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。
设计该程序的基本要求:
1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。
2、表示城市间距离网的邻接矩阵(要求至少6个城市,10条边)
3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
三、总体设计
《1》该程序的主要功能:能实现根据输入城市的信息可以判断该城市间的距离网是否构成最小生成树,遍历城市生成最小生成树,通过计算得到最小生成树的代价。
《2》该城市间的距离网用邻接矩阵表示
《3》用克鲁斯卡尔(Kruskal)算法建立最小生成树
四、详细设计说明
《1》该程序的主要功能:能实现根据输入城市的信息可以判断出该城市间的距离网是否构成最小生成树,遍历城市生成最小生成树,通过计算得到最小生成树的代价。
该程序的模块结构功能图及主要函数如下:
开始
输入城市信息
是否为连通图?
求最小生成树
初始化
是否构成回路?
将最小生成树边集合
打印出最小生成树
的权值与最小生成树的代价
退出
int main ( ) //主程序
int menu ( ) //菜单函数
void create ( ) //输入城市信息函数
void judge( ) //判断是否能够生成最小生成树函数
void display( ) //打印输出
void set ( ) //初始化pre[],rank[]函数
void find ( ) //判断是否构成回路函数
void Union( ) //将能构成最小生成树的边添加到一个集合
l) void Krushal( ) //克鲁斯算法求最小生成树
《2》该城市间的距离网使用邻接矩阵表示,邻接矩阵存储方法(数组存储方法),利用两个数组来存储一个图。用a[ i][ j]数组,利用邻接矩阵方式来储存城市与城市间信息。
《3》算法设计
(1)克鲁斯卡尔算法思想基本描述:
假设连通图N=(V,{E}),则令最小生成树的初始状态为只有n 顶点而无边的非连通图T=(V,{ }),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。以此类推,直至T中所有顶点都在同一个连通分量上为止。
(2)克鲁斯卡尔算法设计
a. 设置计数器E,初值为0,记录已选中
构造可以使n个城市连接的最小生成树 来自淘豆网m.daumloan.com转载请标明出处.