最小生成树问题课程设计报告Word文档格式.doc

上传人:b****1 文档编号:13193547 上传时间:2022-10-08 格式:DOC 页数:25 大小:306KB
下载 相关 举报
最小生成树问题课程设计报告Word文档格式.doc_第1页
第1页 / 共25页
最小生成树问题课程设计报告Word文档格式.doc_第2页
第2页 / 共25页
最小生成树问题课程设计报告Word文档格式.doc_第3页
第3页 / 共25页
最小生成树问题课程设计报告Word文档格式.doc_第4页
第4页 / 共25页
最小生成树问题课程设计报告Word文档格式.doc_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

最小生成树问题课程设计报告Word文档格式.doc

《最小生成树问题课程设计报告Word文档格式.doc》由会员分享,可在线阅读,更多相关《最小生成树问题课程设计报告Word文档格式.doc(25页珍藏版)》请在冰豆网上搜索。

最小生成树问题课程设计报告Word文档格式.doc

通过上机实习,验证自己设计的算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3、培养算法分析能力。

分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。

二.设计内容

最小生成树问题:

设计要求:

在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。

存储结构采用多种。

求解算法多种。

三.概要设计

1、功能模块图

开始

创建一个图

功能选择

1.建立邻接矩阵

2.建立邻接表

3.PRIM算法

4.

kruscal算法

结束

2、各个模块详细的功能描述

※创建一个图:

通过给用户信息提示,让用户将城市信息及城市之间的联系关系和连接权值写入程序,并根据写入的数据创建成一个图。

※功能选择:

给用户提示信息,让用户选择相应功能。

※建立邻接矩阵:

将用户输入的数据整理成邻接矩阵并显现在屏幕上。

※建立邻接表:

将用户输入的数据整理成临接表并显现在屏幕上。

※PRIM算法:

利用PRIM算法求出图的最小生成树,即:

城市之间最经济的连接方案。

四.详细设计

1.主函数和其他函数的伪码算法

※主函数:

voidmain()

{

MGraphG;

Dgevaluedgevalue;

CreateUDG(G,dgevalue);

charu;

cout<

<

"

图创建成功。

;

请根据如下菜单选择操作。

\n"

*****************************************"

endl;

**1、用邻接矩阵存储:

********************"

**2、用邻接表存储:

**********************"

**3、普里姆算法求最经济的连接方案********"

**4、克鲁斯卡尔算法求最经济的连接方案****"

endl<

ints;

chary='

y'

while(y='

{

cout<

请选择菜单:

cin>

>

s;

switch(s)

{

case1:

cout<

用邻接矩阵存储为:

Adjacency_Matrix(G);

break;

case2:

用邻接表存储为:

Adjacency_List(G,dgevalue);

case3:

普里姆算法最经济的连接方案为:

请输入起始城市名称:

cin>

u;

MiniSpanTree_PRIM(G,u);

case4:

克鲁斯卡尔算法最经济的连接方案为:

MiniSpanTree_KRSL(G,dgevalue);

default:

cout<

您的输入有误!

}

是否继续?

y/n:

y;

if(y=='

n'

}

}

※邻接矩阵和临接表的创建:

intCreateUDG(MGraph&

G,Dgevalue&

dgevalue)//构造无向加权图的邻接矩阵

{

inti,j,k;

cout<

请输入城市个数及其之间的可连接线路数目:

cin>

G.vexnum>

G.arcnum;

请输入各个城市名称(分别用一个字符代替):

for(i=0;

i<

G.vexnum;

++i)

cin>

G.vexs[i];

++i)//初始化数组

for(j=0;

j<

++j)

{

G.arcs[i][j].adj=MAX;

}

请输入两个城市名称及其连接费用(严禁连接重复输入!

):

for(k=0;

k<

++k)

{

cin>

dgevalue[k].ch1>

dgevalue[k].ch2>

dgevalue[k].value;

i=LocateVex(G,dgevalue[k].ch1);

j=LocateVex(G,dgevalue[k].ch2);

G.arcs[i][j].adj=dgevalue[k].value;

G.arcs[j][i].adj=G.arcs[i][j].adj;

}

returnOK;

※临接矩阵的输出:

voidAdjacency_Matrix(MGraphG)//用邻接矩阵存储数据

{

inti,j;

for(i=0;

i<

i++)

j<

j++)

if(G.arcs[i][j].adj==MAX)

cout<

0<

"

else

G.arcs[i][j].adj<

cout<

※邻接表的输出:

voidAdjacency_List(MGraphG,Dgevaluedgevalue)//用邻接表储存数据

i++)

{

cout<

G.vexs[i]<

->

for(j=0;

j++)

if(dgevalue[j].ch1==G.vexs[i]&

&

dgevalue[j].ch2!

=G.vexs[i])

dgevalue[j].ch2<

elseif(dgevalue[j].ch1!

=G.vexs[i]&

dgevalue[j].ch2==G.vexs[i])

dgevalue[j].ch1<

\b\b"

}

※最小生成树PRIM算法:

voidMiniSpanTree_PRIM(MGraphG,charu)//普里姆算法求最小生成树

Closedgeclosedge;

k=LocateVex(G,u);

for(j=0;

j++)//辅助数组初始化

if(j!

=k)

closedge[j].adjvex=u;

closedge[j].lowcost=G.arcs[k][j].adj;

closedge[k].lowcost=0;

for(i=1;

k=Minimum(G,closedge);

城市"

closedge[k].adjvex<

与城市"

G.vexs[k]<

连接。

closedge[k].lowcost=0;

++j)

{

if(G.arcs[k][j].adj<

closedge[j].lowcost)

{

closedge[j].adjvex=G.vexs[k];

closedge[j].lowcost=G.arcs[k][j].adj;

}

}

intMinimum(MGraphG,Closedgeclosedge)//求closedge中权值最小的边,并返回其顶点在vexs中的位置

inti,j;

doublek=1000;

if(closedge[i].lowcost!

=0&

closedge[i].lowcost<

k)

k=closedge[i].lowcost;

j=i;

returnj;

※最小生成树kruscal算法:

voidMiniSpanTree_KRSL(MGraphG,Dgevalue&

dgevalue)//克鲁斯卡尔算法求最小生成树

intp1,p2,i,j;

intbj[MAX_VERTEX_NUM];

//标记数组

i++)//标记数组初始化

bj[i]=i;

Sortdge(dgevalue,G);

//将所有权值按从小到大排序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1