大数据结构实验六报告材料Word文档下载推荐.docx
- 文档编号:20648277
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:36
- 大小:48.47KB
大数据结构实验六报告材料Word文档下载推荐.docx
《大数据结构实验六报告材料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《大数据结构实验六报告材料Word文档下载推荐.docx(36页珍藏版)》请在冰豆网上搜索。
输出
按询问次序输出所有Q操作的回答,连通的回答C,不连通的回答D
样例输入
3
3
1
2
2
5
Q
D
样例输出
C
D
【题目六】SortProblem
Anascendingsortedsequenceofdistinctvaluesisoneinwhichsomeformofaless-thanoperatorisusedtoordertheelementsfromsmallesttolargest.Forexample,thesortedsequenceA,B,C,DimpliesthatA<
B,B<
CandC<
D.inthisproblem,wewillgiveyouasetofrelationsoftheformA<
Bandaskyoutodeterminewhetherasortedorderhasbeenspecifiedornot.
【Input】
Inputconsistsofmultipleprobleminstances.Eachinstancestartswithalinecontainingtwopositiveintegersnandm.thefirstvalueindicatedthenumberofobjectstosort,where2<
=n<
=26.Theobjectstobesortedwillbethefirstncharactersoftheuppercasealphabet.ThesecondvaluemindicatesthenumberofrelationsoftheformA<
Bwhichwillbegiveninthisprobleminstance.1<
=m<
=100.Nextwillbemlines,eachcontainingonesuchrelationconsistingofthreecharacters:
anuppercaseletter,thecharacter"
<
"
andaseconduppercaseletter.Noletterwillbeoutsidetherangeofthefirstnlettersofthealphabet.Valuesofn=m=0indicateendofinput.
【Output】
Foreachprobleminstance,outputconsistsofoneline.Thislineshouldbeoneofthefollowingthree:
Sortedsequencedetermined:
yyy…y.
Sortedsequencecannotbedetermined.
Inconsistencyfound.
yyy…yisthesorted,ascendingsequence.
SampleInputSampleOutput
46Sortedsequencedetermined:
ABCD.
A<
BInconsistencyfound.
CSortedsequencecannotbedetermined.
B<
C<
B
32
A
262
Z
D<
S
00
设计要求:
1、上机前,认真学习教材,熟练掌握AOV网、AOE网的构造和拓扑排序算法。
2、上机前,认真独立地写出本次程序清单,流程图,该程序包括图类型以及每一种操作的具体的函数定义和主函数。
有关算法分别参阅讲义和参考教材事例
三、实验步骤
㈠、数据结构与核心算法的设计描述
#defineMAX_VERTEX_NUM20
//变量声明
typedefstructArcNode
//弧结点定义
{
intadjvex;
//该弧所指向的顶点的位置
structArcNode*nextarc;
//指向下一条弧的指针
//InfoType*info;
}ArcNode;
typedefstructVNode
//顶点结点定义
chardata;
//顶点信息
ArcNode*firstarc;
//指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedefstruct
//图的定义
AdjListvertices;
intvexnum,arcnum;
//图的当前顶点数和弧数
intkind;
//图的种类标志
}ALGraph;
ALGraphG;
//定义图变量
boolvisited[MAX_VERTEX_NUM];
//访问标志数组
intindegree[MAX_VERTEX_NUM];
//入度数组
structStack
//栈类型定义
ints[21];
inttop;
};
Stackstack;
//定义一个栈
相关函数声明:
voidCreateGraph(MGraph&
G)
//输入图的顶点和边的信息,建立图
voidDFSTraverse(GraphG,intv)
//深度优先搜索遍历图
voidBFSTraverse(GraphG,intv)
//广度优先搜索遍历图
intLocateVertices(ALGraphG,chara)
//查找字符a在图中的位置
intFirstAdjVex(ALGraphG,intv)
//查找图中位置v的第一个邻接点在图中所在的位置
intNextAdjVex(ALGraphG,intv,intw)
//查找相对于图中位置v的邻接点w的下一邻接点在图中的位置
voidDestroyGraph(ALGraph&
G)
//销毁图
voidInitStack(Stack&
stack)
//初始化栈
voidPushStack(Stack&
stack,inti)
//元素i入栈
voidPopStack(Stack&
stack,int&
i)
//栈顶元素出栈
intStackEmpty(Stackstack)
//判断栈是否为空,若为空则返回1,否则返回0
voidFindInDegree(ALGraphG,int*indegree)
//求图中各个顶点的入度,并相应的存入入度数组中indegree[]
intTopologicalSort(ALGraphG)
//对图进行拓扑排序,并输出相应的拓扑序列
㈡、函数调用及主函数设计
主
函
数
调用CreateGraph(G);
调用TopologicalSort(G)
调用DestroyGraph(G)
㈢程序调试及运行结果分析
由于以前已经做过了关于图的一些算法设计,例如:
图的深度优先遍历,广度优先遍历等,因此,这次试验基本没有什么错误。
㈣实验总结
这次的实验使得我对图的定义及其更多的操作有了更深入的了解,运用起来更加地熟练,掌握了拓扑排序的书写,利用栈实现图的拓扑排序的算法与分析问题的能力,让我能够对以前的知识有所复习,例如:
栈的使用。
对以前的知识有了更深入的理解,例如:
图的数据结构及算法实现,图的存储结构。
这是我收获最大的地方。
四、主要算法流程图及程序清单
1、主要算法流程图:
查找相对于图中位置v的邻接点w的下一邻接点在图中的位置
开始
p=G.vertices[v].firstarc;
p->
adjvex!
=w
p=p->
nextarc;
nextarc=NULL
returnp->
nextarc->
adjvex;
Return-1;
否
是
输入图的顶点和弧的个数
cin>
>
G.vexnum>
G.arcnum;
输入顶点值存入图中
i=1
i<
=G.arcnum
s;
a=LocateVertices(G,s);
b=LocateVertices(G,s);
构造结点p=newArcNode;
将此结点插入适当的位置
adjvex=b;
nextarc=G.vertices[a].firstarc;
G.vertices[a].firstarc=p;
i++
结束
利用邻接表存储结构构造有向图voidCreateGraph(ALGraph&
查找图中位置v的第一个邻接点在图中所在的位置
G.vertices[v].firstarc=NULL
returnG.vertices[v].firstarc->
return-1;
对图进行拓扑排序,并输出相应的拓扑序列
2、程序清单
题目一:
#include<
iostream.h>
stdlib.h>
#defineMAX_VERTEX_NUM20
intindegree[20];
//各结点入度数组
//定义一个栈
for(inti=0;
G.vexnum;
i++)
if(G.vertices[i].data==a)
returni;
return-1;
}
voidCreateGraph(ALGraph&
//利用邻接表存储结构构造有向图
inta,b;
chars;
ArcNode*p;
cout<
endl<
现在要构造一个有向图"
endl;
请输入顶点个数和图中弧的个数"
cin>
请输入各个顶点的值,顶点的值类型为字符类型"
{
cin>
G.vertices[i].data;
G.vertices[i].firstarc=NULL;
}
请输入图中各个弧"
(每一个弧用其所依附的两个顶点值表示,先输入弧尾顶点值,再输入弧头顶点值)"
for(i=1;
=G.arcnum;
a=LocateVertices(G,s);
b=LocateVertices(G,s);
p=newArcNode;
if(!
p)
return;
p->
G.vertices[a].firstarc=p;
if(G.vertices[v].firstarc)
returnG.vertices[v].firstarc->
p=G.vertices[v].firstarc;
while(p->
=w)
p=p->
if(p->
nextarc)
returnp->
ArcNode*p,*p1;
p=G.vertices[i].firstarc;
if(p)
p1=p->
while(p)
{
deletep;
p=p1;
if(p1)
p1=p1->
}
stack.top=0;
stack.s[stack.top++]=i;
i=stack.s[--stack.top];
if(!
stack.top)
return1;
return0;
indegree[i]=0;
for(i=0;
indegree[p->
adjvex]++;
p=p->
intcount=0,w;
FindInDegree(G,indegree);
indegree[i])
PushStack(stack,i);
while(!
StackEmpty(stack))
PopStack(stack,i);
cout<
G.vertices[i].data<
"
;
count++;
for(w=FirstAdjVex(G,i);
w>
=0;
w=NextAdjVex(G,i,w))
if(!
(--indegree[w]))
PushStack(stack,w);
if(count<
G.vexnum)
return-1;
return1;
voidmain()
CreateGraph(G);
拓扑排序的结果如下:
TopologicalSort(G))
图中存在有环"
DestroyGraph(G);
题目二:
intinfo;
intve[20];
//定义顶点最早开始时间存储数组
intvl[20];
//定义顶点最迟开始时间存储数组
//定义一个栈,用于拓扑排序时存储入度为0的顶点
Stackstack1;
//存储逆拓扑排序有序序列
Stackstack2;
//存储关键路径
请输入该弧的长度"
info;
intStackEmpty(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 材料