- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                实用
文档
  
数据结构与算法
课程设计报告
                              
课程设计题目: 
构造可以使n个城市连接的最小生
成树
专业班级:   信息与计算科学1001班                                 
姓    名:   学    号:            
设计室号:       理学院机房                       
设计时间:  2011-12-26   批阅时间:            
指导教师:        成    绩:            
构造可以使n个城市连接的最小生
成树
主要任务:
给定一个地区的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》构造结构体
本题为求最小生成树,先要构造一个结构体,再用邻接矩阵的形式表现出来。
#define  max 20
#define  MAX_LNT 10
typedef struct node /*构造一个结构体,两个城市可以看成起点和终点,之间的道路可以看成一个边*/
{
	int str; /*起点*/
	int end; /*终点*/
	int dis;/*距离*/
}node;
node p[max],temp;		/*p记录城市信息*/
int pre[100],rank[100];/*用于判断是否构成回路*/
int n=0,arcs[MAX_LNT][MAX_LNT];/*n表示城市个数,arcs[][]记录城市间权值*/
《3》初始化
void set(int x)/*初始化*/
  {
	pre[x] = x;
	rank[x] = 0;
  }
int find(int x)/*找到这个点的祖先*/
   {
	if(x != pre[x])
    pre[x] = find(pre[x]);
	return pre[x];
   }
void Union(int x,int y)/*将这两个添加到一个集合里去*/
   {
	x = find(x);
	y = find(y);
	if(rank[x]  = rank[y])
	{
	 pre[y] = x;
	 rank[x] ++;
    }
	else   pre[y] = x;
	 
   }
该城市间的距离网使用邻接矩阵表示,邻接矩
                
原创力文档
                        

文档评论(0)