数据结构作业系统第七章答案doc资料Word文档格式.docx
《数据结构作业系统第七章答案doc资料Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构作业系统第七章答案doc资料Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
}VNode,AdjList[MAX_VERTEX_NUM];
typedefstruct{
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
StatusDfsReachable(ALGraphg,inti,intj)
{
intk;
ArcNode*p;
visited[i]=1;
for(p=g.vertices[i].firstarc;
p;
p=p->
nextarc)
{
if(p)
k=p->
adjvex;
if(k==j)return1;
if(visited[k]!
=1)
if(DfsReachable(g,k,j))return1;
}
}
return0;
}
7.23③同7.22题要求。
试基于图的广度优先搜索策略写一算法。
StatusBfsReachable(ALGraphg,inti,intj);
/*Determinewhetheritexistspathfromvertexito*/
/*vertexjindigraphgwithBreadth_FirstSearch.*/
visited'
StatusInitQueue(Queue&
q);
StatusEnQueue(Queue&
q,inte);
StatusDeQueue(Queue&
q,int&
e);
StatusQueueEmpty(Queueq);
StatusGetFront(Queueq,int&
StatusBfsReachable(ALGraphg,inti,intj)
Queueq;
intk,n;
InitQueue(q);
EnQueue(q,i);
while(!
QueueEmpty(q))
DeQueue(q,k);
visited[k]=1;
for(p=g.vertices[k].firstarc;
n=p->
if(n==j)return1;
if(visited[n]!
=1)EnQueue(q,n);
7.24③试利用栈的基本操作编写,按深度优先搜索策略
遍历一个强连通图的非递归形式的算法。
算法中不规定具
体的存储结构,而将图Graph看成是一种抽象的数据类型。
voidTraverse(Graphdig,VertexTypev0,void(*visit)(VertexType));
/*Travelthedigraph'
dig'
withDepth_FirstSearch.*/
图以及相关类型、函数和辅助变量定义如下:
intLocateVex(Graphg,VertexTypev);
VertexTypeGetVex(Graphg,inti);
intFirstAdjVex(Graphg,intv);
intNextAdjVex(Graphg,intv,intw);
voidvisit(charv);
StatusInitStack(SStack&
s);
StatusPush(SStack&
s,SElemTypex);
StatusPop(SStack&
s,SElemType&
x);
StatusStackEmpty(SStacks);
StatusGetTop(SStacks,SElemType&
voidTraverse(Graphdig,VertexTypev0,void(*visit)(VertexType))
inti,v,flag;
SStacks;
VertexTypep;
//flag来记录某点还有没有邻接点
InitStack(s);
if(dig.vexnum&
&
dig.arcnum)
{i=LocateVex(dig,v0);
visited[i]=TRUE;
visit(v0);
Push(s,v0);
StackEmpty(s))
{GetTop(s,p);
v=LocateVex(dig,p);
flag=0;
for(i=FirstAdjVex(dig,v);
i>
=0;
i=NextAdjVex(dig,v,i))
{if(!
visited[i]){p=GetVex(dig,i);
flag=1;
break;
}}
if(flag)
{visit(p);
Push(s,p);
else{Pop(s,p);
7.27④采用邻接表存储结构,编写一个判别无向图中任意给定的
两个顶点之间是否存在一条长度为k的简单路径的算法。
StatusSinglePath(ALGraphg,VertexTypesv,VertexTypetv,
intk,char*sp);
/*Judgewhetheritexistsapathfromsvtotvwithlengthk*/
/*ingraphg,returnpathusingstringspifexists.*/
图的邻接表以及相关类型、函数和辅助变量定义如下:
typedefcharStrARR[100][MAX_VERTEX_NUM+1];
voidinpath(char*&
path,VertexTypev);
/*Addvertex'
v'
to'
path'
*/
voiddepath(char*&
/*Removevertex'
from'
StatusSinglePath(ALGraphg,VertexTypesv,VertexTypetv,intk,char*sp)
{inti,j,l;
if(sv==tv&
k==0)
{inpath(sp,tv);
returnOK;
else
i=LocateVex(g,sv);
inpath(sp,sv);
l=p->
if(!
visited[l])
if(SinglePath(g,g.vertices[l].data,tv,k-1,sp))
depath(sp,g.vertices[l].data);
visited[i]=0;
7.28⑤已知有向图和图中两个顶点u和v,试编写算法求
有向图中从u到v的所有简单路径。
voidAllPath(ALGraphg,VertexTypesv,VertexTypetv,
StrARR&
path,int&
i);
/*Getallthepathsfromvertexsvtotv,savethem*/
/*intoArraypathwhichcontainsstringcomponents.*/
/*Returnthenumberofpathusingi*/
voidinpath(char*path,VertexTypev);
voiddepath(char*path,VertexTypev);
voidAllPath2(ALGraphg,VertexTypesv,VertexTypetv,
i,int&
d,VertexTypeA[])
{intj,k,l,m,n;
j=LocateVex(g,sv);
visited[j]=1;
A[d++]=sv;
if(sv==tv)
{
m=0;
for(n=0;
n<
d;
n++)
path[i][m++]=A[n];
i++;
for(p=g.vertices[j].firstarc;
AllPath2(g,g.vertices[l].data,tv,path,i,d,A);
visited[j]=0;
d--;
i)
intd=0,j,l;
VertexTypeA[MAX_VERTEX_NUM],B[MAX_VERTEX_NUM];
for(l=0;
l<
5;
l++)
strcpy(B,path[l]);
for(j=0;
j<
strlen(path[l]);
j++)
depath(path[l],B[j]);
AllPath2(g,sv,tv,path,i,d,A);
7.31③试完成求有向图的强连通分量的算法,并分析算法的时间复杂度。
voidStronglyConnected(OLGraphdig,StrARR&
scc,int&
n);
/*Getallthestronglyconnectedcomponentsinthedigraphdig,*/
/*andputtheithintoscc[i]whichisastring.*/
图的十字链表以及相关类型和辅助变量定义如下:
intfinished[MAX_VERTEX_NUM];
typedefcharStrARR[MAX_VERTEX_NUM][MAX_VERTEX_NUM+1];
//记录各强连通分量
typedefstructArcBox{
inttailvex,headvex;
structArcBox*hlink,*tlink;
}ArcBox;
typedefstructVexNode{
ArcBox*firstin,*firstout;
}VexNode;
VexNodexlist[MAX_VERTEX_NUM];
}OLGraph;
intcount;
voidDFS1(OLGraphdig,intv);
voidDFS2(OLGraphdig,intv,StrARR&
scc,intj,intk);
n)
inti,k=0,v;
count=0;
for(v=0;
v<
dig.vexnum;
v++)
visited[v])
DFS1(dig,v);
v++)
visited[v]=0;
for(i=dig.vexnum-1;
i--)
v=finished[i];
DFS2(dig,v,scc,n,k);
n++;
voidDFS1(OLGraphdig,intv)
intw;
ArcBox*p;
visited[v]=1;
for(p=dig.xlist[v].firstout;
tlink)
{w=p->
headvex;
visited[w])
DFS1(dig,w);
finished[count++]=v;
scc,intj,intk)
scc[j][k++]=dig.xlist[v].data;
for(p=dig.xlist[v].firstin;
hlink)
w=p->
tailvex;
DFS2(dig,w,scc,j,k);
7.29⑤试写一个算法,在以邻接矩阵方式存储的
有向图G中求顶点i到顶点j的不含回路的、长度为k
的路径数。
intSimplePath(MGraphG,inti,intj,intk);
/*求有向图G的顶点i到j之间长度为k的简单路径条数*/
图的邻接矩阵存储结构的类型定义如下:
typedefenum{DG,DN,AG,AN}GraphKind;
//有向图,有向网,无向图,无向网
VRTypeadj;
//顶点关系类型。
对无权图,用1(是)或0(否)表示相邻否;
//对带权图,则为权值类型
InfoType*info;
//该弧相关信息的指针(可无)
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
AdjMatrixarcs;
//邻接矩阵
VertexTypevexs[MAX_VERTEX_NUM];
//顶点向量
intvexnum,arcnum;
//图的当前顶点数和弧数
GraphKindkind;
//图的种类标志
}MGraph;
intSimplePath(MGraphG,inti,intj,intk)
intsum=0,v;
if(G.arcs[i][j].adj&
k==1&
!
visited[j])
sum=1;
if(k>
1)
{visited[i]=1;
G.vexnum;
if(G.arcs[i][v].adj&
sum+=SimplePath(G,v,j,k-1);
returnsum;
intSearch(SSTables,KeyTypek);
/*Indextheelementwhichkeyisk*/
/*inStaticSearchTables.*/
/*Return0ifxisnotfound.*/
静态查找表的类型SSTable定义如下:
typedefstruct{
KeyTypekey;
......//其他数据域
}ElemType;
中式饰品风格的饰品绝对不拒绝采用金属,而且珠子的种类也更加多样。
五光十色的水晶珠、仿古雅致的嵌丝珐琅珠、充满贵族气息的景泰蓝珠、粗糙前卫的金属字母珠片的材质也多种多样。
ElemType*elem;
intlength;
世界上的每一个国家和民族都有自己的饰品文化,将这些饰品汇集到一起再进行新的组合,便可以无穷繁衍下去,满足每一个人不同的个性需求。
}SSTable;
服饰□学习用品□食品□休闲娱乐□小饰品□intSearch(SSTablea,KeyTypek)
体现市民生活质量状况的指标---恩格尔系数,上海也从1995年的53.4%下降到了2003年的37.2%,虽然与恩格尔系数多在20%以下的发达国家相比仍有差距,但按照联合国粮农组织的划分,表明上海消费已开始进入富裕状态(联合国粮农组织曾依据恩格尔系数,将恩格尔系数在40%-50%定为小康水平的消费,20%-40%定为富裕状态的消费)。
调研课题:
(2)物品的独一无二/*Return0ifxisnotfound.*/
目前,上海市创业培训中心已开办大学生创业培训班,共招收上海交通大学、上海商业职业技术学院等应届毕业生62人。
inti;
上海市劳动和社会保障局所辖的“促进就业基金”,还专门为大学生创业提供担保,贷款最高上限