教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 资格考试 >

贪心算法设计实验报告(2)

来源:网络收集 时间:2026-09-05
导读: **************************************************************************************/ void Prim(int **Graph,int num_v)//转化为对上三角的维护 { int i,j,leap=0,temp; int m,n,min; int *a=(int *)malloc

**************************************************************************************/

void Prim(int **Graph,int num_v)//转化为对上三角的维护 { int i,j,leap=0,temp; int m,n,min;

int *a=(int *)malloc(sizeof(int)*num_v); for(i=0;i<num_v;i++)

a[i]=0;

a[0]=1;

while(leap!=num_v-1) { min=INF;

for(i=0;i<num_v;i++)//搜索上三角中的最小值 { if(a[i]==1) { for(j=i+1;j<num_v;j++)//行中搜索 { if(min>Graph[i][j]&&Graph[i][j]>0) { min=Graph[i][j]; m=j; n=i; temp=0;

}

}

for(j=0;j<i;j++)//列中搜索 { if(min>Graph[j][i]&&Graph[j][i]>0) {

min=Graph[j][i];

/* for(i=0;i<num_v;i++)//检查矩阵中在那些行(列)可以选择最小值(即那些列和行是候选行和列)

printf("%-4d",a[i]);

}

}

}

}

m=j; n=i; temp=1;

if(temp==0)//为了区别出是在行还是在列中搜索到的元素 else

Graph[m][n]=-1; Graph[n][m]=-1;

for(i=0;i<m;i++)//去掉行中回路边 { }

for(i=m+1;i<num_v;i++)//去掉列中回路边 { } a[m]=1;

if(a[i]==1&&Graph[m][i]>0) { }

Graph[m][i]=INF; if(a[i]==1&&Graph[i][m]>0) { }

Graph[i][m]=INF;

printf("\n");*/

/* for(i=0;i<num_v;i++)//检验对上三角的维护,和下三角是否修改了(下三角保存了原树和用于输出最小生成树) }

void main() {

Graph=(int**)malloc(sizeof(int*)*num_v);//动态生成二维数组用来存储图(邻接矩阵) for(i=0;i<num_v;i++)

for(i=0;i<num_v;i++)//初始化矩阵

for(j=0;j<num_v;j++)

}

{ }*/ leap++;

for(j=0;j<num_v;j++)

printf("%-4d\t",Graph[i][j]);

printf("\n");

int i,j;

int num_v,num_e; int **Graph=NULL; char *V=NULL; char ch_1,ch_2; int weight; int m,n;

printf("请输入图的顶点数:"); scanf("%d",&num_v);

V=(char*)malloc(sizeof(char)*num_v);

Graph[i]=(int*)malloc(sizeof(int)*num_v);

Graph[i][j]=INF;

for(i=0;i<num_v;i++)

Graph[i][i]=0;

for(i=0;i<num_v;i++) { printf("请输入第%d个顶点:",i+1); scanf(" %c",&V[i]); }

printf("请输入图的边数:"); scanf("%d",&num_e); for(i=0;i<num_e;i++) { printf("请输入第%d条边的顶点和权值:",i+1); scanf(" %c %c%d",&ch_1,&ch_2,&weight); for(j=0;j<num_v;j++) { if(V[j]==ch_1)

m=j;

if(V[j]==ch_2)

n=j;

}

Graph[m][n]=weight; Graph[n][m]=weight;

}

//以上是对图用邻接矩阵存储

//------------------------------------------------------------------------------------ Prim(Graph,num_v);

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

}

printf("顶点----------------顶点-----------------权值\n"); weight=0;

for(i=0;i<num_v;i++)

for(j=i+1;j<num_v;j++) { }

if(Graph[i][j]==-1) { }

printf(" %-2c ---------------- %-2c ----------------- %-2d\n",V[i],V[j],Graph[j][i]); weight=weight+Graph[j][i];

printf("最小生成树的权重是:%d\n",weight);

六、实验结果与分析

Kruskal算法适用于边稀疏的情形,而Prim算法适用于边稠密的情形

…… 此处隐藏:247字,全部文档内容请下载后查看。喜欢就下载吧 ……
贪心算法设计实验报告(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/91181.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)