下载此文档

实验五.Kruskal算法的设计.doc


文档分类:IT计算机 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
[实验目的]
根据算法设计需要, 掌握连通网的灵活表示方法;
掌握最小生成树的Kruskal算法;
基本掌握贪心算法的一般设计方法;
进一步掌握集合的表示与操作算法的应用.
[预习要求]
认真阅读算法设计教材和数据结构教材内容, 熟习连通网的不同表示方法和最小生成树算法;
设计Kruskal算法实验程序.
实验目的: 
1. 根据算法设计需要, 掌握连通网的灵活表示方法;
2. 掌握最小生成树的Kruskal算法;
3. 基本掌握贪心算法的一般设计方法;
4. 进一步掌握集合的表示与操作算法的应用.
实验内容: 
  编写 Kruskal 算法程序求最小生成树.
程序关键代码: 
 
void CreatGraph(MGraph *G)// 构件图
{int i, j,n, m;
 fscanf(fp1,"%d,%d",&G->um,&G->vexnum);// 输入边数和顶点数
 for(i=1;i<=G->vexnum;i++)// 初始化图
  for(j=1;j<=G->vexnum;j++)
  G->arc[i][j].tag=0;// 初始化adj值
 for(i=1;i<=G->um;i++)// 输入边和权值 
 {
  fscanf(fp1,"%d-%d",&n,&m);
  G->arc[n][m].tag=1; 
  fscanf(fp1,"%d",&G->arc[n][m].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;
  temp=edges[i].end;  
  edges[i].end=edges[j].end;
  edges[j].end=temp;
  temp = edges[i].weight;  
  e
dges[i].weight=edges[j].weight;
  edges[j].weight=temp;

 
void sort(edge edges[],MGraph *G)// 对权值进行排序 
{int i,j;
 for(i=1;i<G->um;i++)
  for(j=i+1;j<=G->um;j++)
  if(edges[i].weight>edges[j].weight)
  Swapn(edges,i,j);
 fprintf(fp2," 按权值从小到大排序后的各边及其权值:\n");
 fprintf(fp2," 边权值\n");
 for(i=1;i<=G->um;i++)
  fprintf(fp2,"(%d,%d) %d\n",edges[i].begin,edges[i].end,edges[i].weight);
}
 
int Find(int *parent,int f) 
{while(parent[f]>0) // 去掉回路
  f=parent[f];  
 ret

实验五.Kruskal算法的设计 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数3
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小24 KB
  • 时间2018-11-14
最近更新