贪心算法实验(最小生成树)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析与设计实验报告第一次附加实验

{

Type lowcost[N+1]; // 记录 c[j][closest]的最小权值 int

closest[N+1]; //V-S中点j在中的最临接顶点

bool s[N+1]; //标记各结点是否已经放入集合s中

s[1]= true ;

// 初始化 s[i],lowcost[i],closest[i]

for (i nt i=2;i<=n ;i++)

{

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

closest[i]=1;

s[i]= false ;

}

for (i nt i=1;i

{

Type min=inf;

int j=1;

for (int k=2;k<=n;k++) // 找出 V-S 中是lowcost 最小的顶

j

{

if((lowcost[k]

附录:

完整代码(贪心法)

//贪心算法最小生成树prim算法

#include

#inelude

#inelude

#inelude

#include

using namespace std;

#define inf 9999; //定义无限大的值const int N=6;

template < class Type> // 模板定义

void Prim( int n,Type c[][N+1]);

int mai n()

{

int c[N+1][N+1];

cout<< "连通带权图的矩阵为:"<

for (int i=1;i<=N;i++) // 输入邻接矩阵

for (int j=1;j<=N;j++)

{

cin>>c[i][j];

}

}

cout<< "Prim 算法最小生成树选边次序如下: " <

clock_t start,end,over; // 计算程序运行时间的算法

start=clock();

end=clock();

over=end-start;

start=clock();

Prim(N,c); // 调用 Prim 算法函数

end=clock();

printf( "The time is %6.3f" ,(double )(end-start-

// 显示over)/CLK_TCK); 运行时间

cout<

system( "pause" );

return 0;

}

template < class Type>

//参数为结点个数n,和无向带权图中各结点之间的距离c[][N+1] void Prim( int n,Type c[][N+1])

{

Type lowcost[N+1]; // 记录c[j][closest]的最小权值

int closest[N+1]; //V-S中点j在s中的最临接顶点

bool s[N+1]; //标记各结点是否已经放入S集合|

s[1]= true ;

// 初始化 s[i],lowcost[i],closest[i]

for (int i=2;i<=n;i++)

{

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

closest[i]=1;

s[i]= false;

}

for (int i=1;i

{

Type min=inf;

int j=1;

for (int k=2;k<=n;k++) // 找出 V-S 中是lowcost 最小的顶点 j

{

if ((lowcost[k]

且 k结

点没有被访问

{

min=lowcost[k]; // 更新 min 的值

j=k;

}

}

coutvvjvv ' ' <

s[j]= true ; // 将j添加到 s 中

for (int k=2;k<=n;k++)

{

if ((c[j][k]

lowcost 的值

{

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

closest[k]=j;

}

}

}

}

相关文档
最新文档