数据结构C语言课程设计任务书完整版图的算法Word下载.docx
- 文档编号:18888861
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:362.94KB
数据结构C语言课程设计任务书完整版图的算法Word下载.docx
《数据结构C语言课程设计任务书完整版图的算法Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构C语言课程设计任务书完整版图的算法Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
2.1.1、图的抽象数据类型
ADTGraph{
数据对象:
V:
v是具有相同特性的数据元素的集合,称为顶点集。
数据关系:
R={VR}
VR={v,w}|v,w∈V且P(v,w),<
v,w>
表示从v到w的弧
谓词P{v,w}定义了弧<
的意义或信息
基本操作:
intlocateALG(ALGraphg,charv)
操作结果:
得到某元素的位置
intconvert(char*str)
操作结果:
将字符转化为数字
intReadFileBiao(ALGraph&
g,FILE*fp)
操作结果:
从文件中读取信息到邻接表
voidReadFilejuzhen(MGraph&
G,FILE*fp)
操作结果:
从文件中读取信息到邻接矩阵
voidMiniSpanTree_PRIM(MGraphG,charu)
普里姆算法的实现
voidSortEdge(MGraphG,EdgeE[])
对图中的权值进行递增排序
voidMiniSpanTree_Kruskal(EdgeE[],MGraphG,intn)
操作结果:
克鲁斯卡尔算法的实现
voidppath(MGraphG,charpath[],inti,charv)
求图中某点最短距离所经过的顶点
voidDisPath(MGraphG,intdist[],charpath[],ints[],intn,charv)操作结果:
计算最短路径
voidShortestPath_DIJ(MGraphG,charv)
迪杰斯克拉算法的实现
intFindInDegree(ALGraphG,intindegree[])
求各顶点的入度
voidTopologicalSort(ALGraphG)
拓扑排序算法的实现
}ADTGraph
2.1.2、栈的抽象数据类型
ADTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,………,n,n>
=0}
数据关系:
R1={<
ai-1,ai>
|ai-1,ai∈D,i=2,…n}
约定an端为栈顶,ai端为栈底。
基本操作:
InitStack(&
S)
构造一个空栈S
DSestroyStack(&
Ss)
销毁栈
Push(&
S,e)
插入元素e为新的栈顶元素
Pop(&
S,&
e)
删除S的栈顶元素,并用e返回其值
StackEmpty(S)
操作结果:
判断栈是否为空
}
2.2、总体功能流程图
1、功能模块
2、主界面流程图
2.3、伪码算法
1、普里姆算法伪代码及流程图
voidMiniSpanTree_PRIM(MGraphG,charu){
intM[50][50];
intv,i,j,k;
v=locateMG(G,u);
for(i=0;
i<
G.vexnum;
i++)
for(j=0;
j<
j++)
M[i][j]=G.arcs[i][j].adj;
for(i=0;
i++)
j++)
{
if(M[i][j]==0)
{
G.arcs[i][j].adj=999;
}
}
intlowcost[50],min;
for(i=0;
i++)
{
lowcost[i]=G.arcs[v][i].adj;
lowcost[v]=0;
for(i=1;
min=999;
for(j=0;
j++)
if(lowcost[j]!
=0&
&
lowcost[j]<
min)
{
min=lowcost[j];
k=j;
printf("
边(%c,%c)权为:
%d\n"
closest[k],G.vexs[k],min);
lowcost[k]=0;
for(j=0;
j++){t
if(G.arcs[k][j].adj!
G.arcs[k][j].adj<
lowcost[j]){
lowcost[j]=G.arcs[k][j].adj;
离
closest[j]=G.vexs[k];
}
2、克鲁斯卡尔的伪代码及流程图
voidMiniSpanTree_Kruskal(EdgeE[],MGraphG,intn)
{inti,j,m1,m2,sn1,sn2,k,vset[100];
charu,v;
for(i=0;
n;
i++)vset[i]=i;
k=1;
j=0;
while(k<
n)
{u=E[j].u;
v=E[j].v;
m1=locateMG(G,u);
m2=locateMG(G,v);
sn1=vset[m1];
sn2=vset[m2];
if(sn1!
=sn2){printf("
边(%c,%c)权为:
u,v,E[j].w);
k++;
for(i=0;
i++){if(vset[i]==sn2)}}
3、迪杰斯特拉算法的伪代码及流程图
voidShortestPath_DIJ(MGraphG,charv)
{intM[50][50];
intv0=locateMG(G,v);
for(inti=0;
i++)
for(intj=0;
j++){
if(M[i][j]==0){
else{
M[i][j]=G.arcs[i][j].adj}}
intdist[20];
charpath[20];
ints[20];
intmindis,i,j,u,n=G.vexnum;
i++)
{
dist[i]=G.arcs[i][j].adj;
s[i]=0;
if(G.arcs[v0][i].adj<
999)
path[i]=G.vexs[v0];
else
path[i]=-1;
s[v0]=1;
path[v0]='
a'
;
{mindis=999;
u=-1;
if(s[j]==0&
dist[j]<
mindis)
{u=j;
mindis=dist[j];
s[u]=1;
if(s[j]==0)
if(G.arcs[u][j].adj<
999&
dist[u]+G.arcs[u][j].adj<
dist[j])
{dist[j]=dist[u]+G.arcs[u][j].adj;
path[j]=G.vexs[u];
}
}DisPath(G,dist,path,s,n,v);
4、拓扑排序的伪代码及流程图
voidTopologicalSort(ALGraphG){
SqStackS;
ArcNode*p;
intindegree[G.vexnum];
chartuopoxulie[G.vexnum];
inti,k,count;
FindInDegree(G,indegree);
InitStack(S);
for(i=1;
=G.vexnum;
++i)
if(!
indegree[i])Push(S,i);
count=0;
while(!
StackEmpty(S)){
Pop(S,i);
tuopoxulie[count++]=G.vertices[i].data;
for(p=G.vertices[i].firstarc;
p;
p=p->
nextarc){
k=p->
adjvex;
if(!
(--indegree[k]))Push(S,k);
}
printf("
\n"
);
if(count>
0){
你所给的有向图的拓扑序列为:
\n("
for(i=1;
count;
printf("
%c,"
G.vertices[i].data);
%c)\n"
G.vertices[count].data);
if(count<
G.vexnum)
,但该有向图中存在回路!
}
else
你所给的有向图不存在拓扑序列\n"
}
3、调试设计
3.1、遇到的问题
1、不晓得怎么去从文件里面读中文。
2、在迪杰斯特拉算法还不是很了解其逻辑思路。
3.2、算法的时空分析
T(n)=O(n2)
3.3、改进设想
在进入某个功能模块时,或者某个功能的某个步骤时,可以允许出现输入错误,因此,要实现进入某个步骤时实现撤销操作…..
3.4、经验体会
虽说此次是任选题,实质上是必选题,此次的题目比较难。
我前面的一位同学的题目是我7大小题中的一个小题。
表示鸭梨很大。
由于第一次接触到C语言的操作文件,在探索过程中有点枯燥繁琐。
弄好了文件,接下来的就更难了。
什么普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、拓扑排序。
不是数据结构书就可以搞定的。
这些算法需要的辅助很多。
因此要狠清楚的了解她们的逻辑关系。
不过,虽然有点难。
但在编程上有了很大的飞跃
4、测试结果
4.1输出有向图邻接矩阵信息
4.2输出有向图邻接表信息
4.3输出普里姆算法的结果
4.4输出克鲁斯卡尔算法的结果
4.6输出拓扑排序算法的结果
5、参考文献
1、数据结构(C语言版)——严蔚敏、吴伟民
2、C程序设计(第三版)——谭浩强
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言 课程设计 任务书 完整 版图 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)