- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
离散数学实验报
《离散数学》实验报告
离散数学实验报告
姓 名:
学 号:
班 级:
实验地点:
实验时间:
实验目的和要求
运用最小生成树思想和求最小生成树程序解决实际问题。实际问题描述如下:
八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km。问从海岸经1号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)?
从~到
2
3
4
5
6
7
8
1
1.3
2.1
0.9
0.7
1.8
2.0
1.8
2
0.9
1.8
1.2
2.8
2.3
1.1
3
2.6
1.7
2.5
1.9
1.0
4
0.7
1.6
1.5
0.9
5
0.9
1.1
0.8
6
0.6
1.0
7
0.5
实验环境和工具
实验环境:Windows 7 旗舰版
工具:Dev-C++ 5.8.3
实验过程
开始算法流程图
开始
结束
结束
int i,j;MGraph g;
int i,j;
MGraph g;
float A[MAXV][10];g.vexnum;
在屏幕上打印运行结果A[i][j]=INF;
在屏幕上打印运行结果
A[i][j]=INF;
Jg.vexnum Y
Jg.vexnum
dispMat(g);prim(g,0);i=0;j=0;
dispMat(g);
prim(g,0);
i=0;
j=0;
g.vexnum=8;
Y
表中数据赋值给A[MAXV][10]ig.vexnum N
表中数据赋值给A[MAXV][10]
ig.vexnum
程序核心代码
//油管铺设问题 Prim算法实现
#include iostream
#includeiomanip
using namespace std;
#define MAXV 10
#define INF 32767 //INF表示∞
typedef int InfoType;
typedef struct{
int no; //顶点编号
InfoType info; //顶点其他信息
} VertexType; //顶点类型
typedef struct{ //图的定义
float edges[MAXV][MAXV]; //邻接矩阵
int vexnum; //顶点数
VertexType vexs[MAXV]; //存放顶点信息
} MGraph; //图的邻接矩阵类型
/*输出邻接矩阵g*/
void DispMat(MGraph g){
int i,j;
for (i=0;ig.vexnum;i++){
for (j=0;jg.vexnum;j++)
if (g.edges[i][j]==INF)
coutsetw(6)∞;
else
coutsetw(6)g.edges[i][j];
coutendl;
}
}
void prim(MGraph g,int v){ //从顶点V0出发,按Prim算法构造G的最小生成树
//输出最小生成树的每条边及其权值
float Vlength[MAXV];
int i, j, k;
int cloest[MAXV];
float min;
float sum = 0.0;
for(i=0;ig.vexnum;i++){
Vlength[i]=g.edges[v][i];
cloest[i]=v;
}
for(i=1;ig.vexnum;i++){
min=INF; //min为其中最大的一条边=MAXV
for(j=0;jg.vexnum;j++){ //找n-1条边
if(Vlength[j]!=0Vlength[j]min){
min=Vlength[j];
k=j;
}
}
cout连接油井cloest[k]+1,k+1 长度为:minendl;
sum+=min;
Vlength[k]=0;
Vlength[cloest[k]]=0;
for(j=0;jg.vexnum
原创力文档


文档评论(0)