用贪心算法求解Prim算法上机实验报告书_贪心算法设计实验报告

2020-02-28 其他范文 下载本文

用贪心算法求解Prim算法上机实验报告书由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“贪心算法设计实验报告”。

算法分析与设计

实验报告

班级:学号:姓名:上机时间:

一、实验目的与要求:

1、熟悉贪心算法的基本原理和适用范围;

2、使用贪心算法编程,求解最小生成树问题。

二、实验题目:

用贪心算法求解Prim算法

三、实验内容:

任选一种贪心算法(prim或Kruskal),求解最小生成树。对算法进行

描述和复杂性分析。编程实现。

四、问题描述:

设G=(V,E)是连通带权图,V={1,2,…,n}。构造G的最小生成树的Prim

算法的基本思想是:首先置S={1},然后,只要S是V的真子集,就作如

下的贪心选择:选取满足条件i∈s,j∈V-S,且c[i][j]最小的边,将顶

点j添加到S中。这个过程一直进行到S=V时为止。在这个过程中选取到的所有边恰好构成G的一棵最小生成树。

五、问题分析与算法设计

六、实验结果及分析

七、实验总结

八、程序代码

#include

#include

#include

#include

#include

#define maxint 20

#define inf 700

int AllSelected(int n,int s[])

{

int i;

for(i = 1;i

{

if(s[i] == 0)

return 0;

}

return 1;

}

void Prim(int n,int **c)

{

int lowcost[maxint];

int closest[maxint];

bools[maxint];s[1]=true;

for(int i=2;i

{

lowcost[i]=c[1][i];

closest[i]=1;

s[i]=false;

}

for(i=1;i

{

int min=inf;

int j=1;

for(int k=2;k

{

if((lowcost[k]

{

min=lowcost[k];

j=k;

}

s[j]=true;

for(int k=2;k

if((c[j][k]

{

lowcost[k]=c[j][k];closest[k]=j;

}

}

}

}

void main()

{

int n,i,j;

int **k;

printf(“请输入顶点个数:”);

scanf(“%d”,&n);

k=(int **)malloc(sizeof(int *)*(n + 1));

for(i = 1;i

k[i] =(int *)malloc(sizeof(int)*(n+1));

printf(“输入顶点间的权值(自己到自己为0,没有路的为大于其他任何值的数):n”);for(i=1;i

for(j=i;j

{

printf(“k[%d][%d]=k[%d][%d]=”,i,j,j,i);

scanf(“%d”,&k[i][j]);

k[j][i]=k[i][j];

}

printf(“n”);

printf(“顶点t”);

for(i=1;i

{

printf(“%dt”,i);

}

printf(“n”);

for(i=1;i

{

printf(“%dt”,i);

for(j=1;j

{

printf(“%dt”,k[i][j]);

}

printf(“n”);

}

printf(“n”);

Prim(n,k);

}

《用贪心算法求解Prim算法上机实验报告书.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
用贪心算法求解Prim算法上机实验报告书
点击下载文档
相关专题 贪心算法设计实验报告 算法 报告书 贪心 贪心算法设计实验报告 算法 报告书 贪心
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文