算法程序设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《程序设计》课程设计
姓名:王
学号:
班级:软件工程00班
指导教师:王会青
成绩:
2010年6月
实验一.构造可以使n个城市连接的最小生成树
专业:__软件工程___ 班级:__软件姓名:_王___ 学号:_
完成日期:_2010/6/26________
一、【问题描述】
给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。
1 城市间的道路网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。
2 显示出城市间道路网的邻接矩阵。
3 最小生成树中包括的边及其权值,并显示得到的最小生成树的总代价。
4 输入城市数、道路数→输入城市名→输入道路信息→执行Kruskal 算法→执行 Prim 算法→输出最小生成树
二、【问题分析】
1.抽象数据类型结构体数组的定义:
#ifndef ADJACENCYMATRIXED 程图
4.数据类型定义
为了用邻接矩阵表示图 G ,先是定义二维数组的每一个元素含道路值然后在图的定义中定义一个此二维数组的结构成员。并且在图中还定义一个用来存放城市的一维数组及int 型的城市数级道路数。
用二维数组的两个下标表示道路,这两个下标又在一位数组中对应两个城市。
这样就建立起了一个城市到城市之间的道路网。
4. 程序主要模块
说明:该程序共含5个模块,本人负责其中2个模块构造:
***************LocateVex(MGraph G, VertexType v)****************
Status LocateVex(MGraph G, VertexType v);
{
while (strcmp[i], v)) {i++;}
返回 i;
}
**************** CreateUDN************************* {
输入城市数、道路数;
for (i=0; i<城市数; ++i) 输入城市名;
for (i=0; i<城市数; ++i)
for(j=0; j<城市数; ++j)
初始化邻接矩阵:道路值= INFINITY;
for (i=0; i<城市数; ++i)
for(j=0; j<城市数; ++j)
输入两个城市表示道路,输入道路值;
}
PRIM算法
************************** MiniSpanTree_PRIM********* void MiniSpanTree_PRIM(MGraph G, VertexType u)
{
定义辅助数组:closedge closeEdge;
初始化:strcpy(closeEdge[j].adjvex, u);
closeEdge[j].lowcost = [k][j].adj;
for (i=1; i<; ++i)
{
在其余个城市中找到离辅助数组中标记的道路最小值;
显示找到的道路;
标记新找到的城市;
}
}
********************** Minimum*****************
Status Minimum(closedge closeEdge, int n)
{
在辅助数组中找到道路值最小的道路的两点城市:
if ((closeEdge[i].lowcost != 0) && (minTemp > closeEdge[i].lowcost))
返回该城市在 G 中的位置
}
三、【功能实现】
#include <>
#include <>
#include <>
#include <>
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
MGraph G; = UDN;
int i, j, k;
VertexType v1, v2;
VRType w;
printf(" 构造可以使N个城市连接的最小生成树\n");
printf("请输入城市数、道路数(至少6个城市,10条道路):");
cin>>>>;
for (i=0; i<; ++i) dj = INFINITY;
nfo = NULL;
}
}
printf("请输入一条道路连接的两个城市名及权值:\n");
for (k=0; k<; ++k) dj = w; owcost != 0) && (minTemp > closeEdge[i].lowcost))
{
minTemp = closeEdge[i].lowcost;
flag = i;
}
}
return flag;
}
void MiniSpanTree_PRIM(MGraph G, VertexType u)
{
djvex, u);
closeEdge[j].lowcost = [k][j].adj;
}
}
cout<<"\n\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\\n";