欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构-第七章图:习题(共13页).docx

    • 资源ID:13442717       资源大小:167.69KB        全文页数:13页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构-第七章图:习题(共13页).docx

    精选优质文档-倾情为你奉上第七章图:习题习    题一、选择题    1设完全无向图的顶点个数为n,则该图有(  )条边。    A. n-l    B. n(n-l)/2      C.n(n+l)/2    D. n(n-l)    2在一个无向图中,所有顶点的度数之和等于所有边数的(  )倍。    A.3    B.2    C.1    D.1/2    3有向图的一个顶点的度为该顶点的(  )。    A.入度    B. 出度    C.入度与出度之和    D.(入度+出度)/2    4在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vjV,vivj)都的,则称该图是(  )。    A.强连通图    B.连通图    C.非连通图    D.非强连通图    5若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个(  )。    A.上三角矩阵    B.稀疏矩阵    C.对角矩阵    D.对称矩阵    6若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵    A.第i列元素之和    B.第i行元素之和减去第i列元素之和    C.第i行元素之和    D.第i行元素之和加上第i列元素之和     7对于具有e条边的无向图,它的邻接表中有(  )个边结点。    A.e-l    B.e    C.2(e-l)    D. 2e    8对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为(  ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为(  )。    A. O(n2)    B. O(n*e)    C. O(n*logn)    D.O(e)    9对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O(  )    A.n    B.n+l    C.n-l    D.n+e    10在一个带权连通图G中,权值最小的边一定包含在G的(  )生成树中。    A.最小    B.任何     C.广度优先    D.深度优先二、填空题    1在一个具有n个顶点的无向完全图中,包含有_条边;在一个具有n个有向完全图中,包含有_条边。    2对于无向图,顶点vi的度等于其邻接矩阵_ 的元素之和。    3对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有_个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_个弧结点。    4十字链表是有向图的另一种链式存储结构,实际上是将_和_结合起来的一种链表。    5在构造最小生成树时,克鲁斯卡尔算法是一种按_的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_的方式来构造最小生成树的另一种方法。    6对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_。    7对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_ ,边数为_。    8在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。为了避免重复检测顶点的入度是否为零,需要设立一个_来存放入度为零的顶点。三、简答题    l回答以下问题:    (1)有n个顶点的无向连通图最多需要多少条边?最少需要多少条边?    (2)表示一个具有1000个顶点、1000条边的无向图的邻接矩阵有多少个矩阵元素?有多少非零元素?是否为稀疏矩阵?    2题图7-1为一有向图,按要求回答问题:    (1)写出各顶点的入度、出度和度。    (2)给出该图的邻接矩阵。    (3)给出该图的邻接表。    (4)给出该图的十字链表。3题图7-2为一无向图,请按要求回答问题:    (1)画出该图的邻接表。    (2)画出该图的邻接多重表。    (3)分别写出从顶点1出发按深度优先搜索遍历算法得到的顶点序列和按广度优先搜索  遍历算法得到的顶点序列。             4题图7-3为一带权无向图,请按要求回答问题。(1)    画出该图的邻接矩阵,并按普里姆算法求其最小生成树。(2)画出该图的邻接表,并按克鲁斯卡尔算法求其最小生成树。  5题图7-4是一带权有向图,试采用狄杰斯特拉Dijkstra算法求从顶点1到其他各项点的最短路径,要求给出整个计算过程。   6题图7-5为一个带权有向图    (1)给出该图的邻接矩阵。    (2)请用弗洛伊德算法求出各顶点对之间的最短路径长度,要求写出其相应的矩阵序列。    7对于有向无环图,    (1)叙述求拓扑有序序列的步骤。    (2)对于题图7-6所示的有向图,写出它的4个不同的拓扑有序序列。    8题图7-7是一个AOE网,试求:    (1)每项活动的最早开始时间和最迟开始时间。    (2)完成整个工程至少需要多少天。    (3)哪些是关键活动。    (4)是否存在某些活动,当提高其速度后能使整个工期缩短。   四、算法设计题    1编写一个算法,判断图G中是否存在从顶点vi到vj的长度为k的简单路径。    2以邻接表作为图的存储结构,编写实现连通图G的深度优先搜索遍历(从顶点v出发)的非递归函数。    3给定n个村庄之间的交通图。若村庄i与村庄j之间有路可通,则将顶点i与顶点j之间用边连接,边上的权值Wij表示这条道路的长度。现打算在这n个村庄中选定一个村庄建一所医院。试编写一个算法,求出该医院应建在哪个村庄,才能使距离医院最远的村庄到医院的路程最短。4编写一个函数,计算给定的有向图的邻接矩阵的每对顶点之间的最短路径。第七章 图第7章图一、选择题(参考答案):1B    2B    3C      4B    5D6. C    7D    8A,D    9D    10.A二、填空题(参考答案)1n(n-l)/2, n(n-l)。      2第i行。3. 2e, e0                  4邻接表,逆邻接表。5权值递增,顶点连通。    6O(e),O(e)。7n,n-l。                 8栈。三、简答题1回答以下问题:    (1)有n个顶点的无向连通图最多需要多少条边?最少需要多少条边?    (2)表示一个具有1000个顶点、1000条边的无向图的邻接矩阵有多少个矩阵元素?有多少非零元素?是否为稀疏矩阵?    【解答】(l)有n个顶点的无向连通图最多有n(n-l)/2条边(构成一个无向完全图的情况);最少有n-l条边(n个顶点是连通的)。    (2)这样的矩阵共有lOOO*1000=个矩阵元素,因为有1000条边,所以有2000非零元素,因此该矩阵是稀疏矩阵。    2题图7-1为一有向图,按要求回答问题:题图7-1    (1)写出各顶点的入度、出度和度。    (2)给出该图的邻接矩阵。    (3)给出该图的邻接表。    (4)给出该图的十字链表。【解答】(l)各顶点入度、出度和度如下表所示。    (2)邻接矩阵如下所示。0    0    0    0    0    01    0    0    1    0    00    1    0    0    0    10    0    1    0    1    11    0    0    0    0    01    1    0    0    1    0    (3)邻接表如下所示。    (4)十字接表如下所示。    3题图7-2为一无向图,请按要求回答问题:    (1)画出该图的邻接表。    (2)画出该图的邻接多重表。    (3)分别写出从顶点l出发按深度优先搜索遍历算法得到的顶点序列和按广度优先搜索遍历算法得到的顶点序列。题图7-2    【解答】(1)邻接表如下所示。(2)多重邻接表如下所示。(3)从顶点1出发,深度优先搜索遍历序列为:;广度优先搜索遍历序列为:。4题图7-3为一带权无向图,请按要求回答问题:(1)画出该图的邻接矩阵,并按普里姆算法求其最小生成树。(2)画出该图的邻接表,并按克鲁斯卡尔算法求其最小生成树。【解答】(1)按普里姆算法其最小生成树如下所示。    (2)按克鲁斯卡尔算法其最小生成树如下所示。5题图7-4是一带权有向图,试采用狄杰斯特拉Dijkstra算法求从顶点l到其他各顶点的最短路径,要求 给出整个计算过程。    【解答】(1)初值:s=1),dist=0,20,15,(顶点1到其他各项点的权值),path=1,1,1,    -l,-1,-1)(顶点l到其他各项点有弧存在时为1,否则为-1)。    (2)在V-S中找最近(dist最小)的顶点3,加入S中,即s=l,3),并重新计算顶点l到达顶点2,4,5和6的距离,修改相应的dist值:    dist2=mindist2,  dist3+cost32=min20,  15+4=19;    dist6l=mindist6, dist3+cost36=Inin,15+10=25;    则有dist=0,19,15,25,path=l,3,1,-l,-l,3。    (3)在V-S中找出最近的顶点4,加入S中,即s=1,3,2,并重新计算顶点1到达顶点4,5和6的距离,修改相应的dist值:    dist5-mindist5,   dist2+ cost25)-min,19+10=29,    则有dist=0,19,15, ,29,25),path=l,3,l,-1,2,3.    (4)在V-S中找出最近的顶点6,加入S中,即s1,3,2,6),并重新计算顶点l到达顶点4和5的距离,修改相应的dist值:    dist4=mindist4, dist6+cost64)=min.,25+4=29,    则有dist=0, 19, 15, 29, 29, 25, path=l,3,1,6,2,3。    (5)在V-S中找出最近的顶点4,加入S中,即s:l,3,2,6,4,并重新计算顶点l到达顶点5的距离,此时不需要修改dist值,则有dist=0,19,15,29,29,25),path=l,3,  l,6,2,  3。    (6)在V-S中找出最近的顶点5,加入S中,即s口=l,3,2,6,4,5。此时S中包含了图的所有顶点,算法结束。最终dist=0,19,15,29,29,25),path=1,3,l,6,2,  3。    由此得到:    从顶点1到顶点2的最短路径长度为:19    最短路径为:2<-3<-1    从顶点l到顶点3的最短路径长度为:15    最短路径为:3<-1    从顶点l到顶点4的最短路径长度为:29    最短路径为:4<-6<-3<-1    从顶点l到顶点5的最短路径长度为:29    最短路径为:5<-2<-3<-l    从顶点l到顶点6的最短路径长度为:25    最短路径为:6<-3<-1    6题图7-5为一个带权有向图,    (1)给出该图的邻接矩阵。    (2)请用弗洛伊德算法求出各顶点对之间的最短路径长度,要求写出其相应的矩阵序列。    【解答】(1)邻接矩阵如下:0   10      15   0    6   3      0   4   8    2   0  (2)采用弗洛伊德算法求最短路径的过程如下:7对于有向无环图,   (1)叙述求拓扑有序序列的步骤。   (2)对于题图7-6所示的有向图,写出它的4个不同的拓扑有序序列。    【解答】(1)参见7.6节的介绍。    (2)它的4个不同的拓扑有序序列是:,。    8题图7-7是一个AOE网,试求:    (l)每项活动的最早开始时间和最迟开始时间。    (2)完成整个工程至少需要多少天(设弧上权值为天数)。    (3)哪些是关键活动。    (4)是否存在某些活动,当提高其速度后能使整个工期缩短。    【解答】(1)所有活动的最早开始时间e(i)、最迟开始时间l(i)以及d(i)=1(i)一e(i),如下所示。    (2)完成此工程最少需要23天。    (3)从以上计算得出关键活动为:a2,a4,a6,a8,a9,aio,a12,a13和a14。    (4)存在a2,a4,al4活动,当其提高速度后能使整个工程缩短工期。    四、算法设计题    1编写一个算法,判断图G中是否存在从顶点vi到vj的长度为k的简单路径。    【解答】采用深度优先遍历算法来判断图G中是否存在从顶点vi到vj的长度为k的简单路径。其中,变量n用于记录经过的顶点数,当n=k+l时,表示路径长度为k;suc记录是否成功地找到了所求路径。算法如下所示。    #define Max<一个大于顶点数的常量>    int  visited Max,    /全局变量    int exist (ALGraph *g,int  vi; int  Vj, intk)        int i,suc;    for(i=O;i<g->n;i十+)    /置初值    visited i =0;    suc=0; n=0;    dfs (g, vi, Vj, suc,k);    return suc;        void dfs (ALGraph *g,int V,int  Vj, int  &suc, int k)        ArcNode *p;    Visited v =l;    n+;    if (n=k+lv=vj)suc=l;  /找到了满足题意的路径    if(n<k+1)    p=g->adj listv ->firstarc;    while(p!=NULL&& suc=0)    if (visitedp->adj vex =0)    dfs (g, p->adjvex, Vj, suc,k)j    n-;        p=p->nextarc;                2以邻接表作为图的存储结构,编写实现连通图G的深度优先搜索遍历(从顶点v出发)的非递归函数。    【算法基本思想】第一步,首先访问图G的指定起始顶点v;第二步,从v出发,访问一个与V邻接且未被访问的顶点p,再从顶点p出发,访问与p邻接且未被访问的顶点q,如此重复,直到找不到未访问过的邻接顶点为止;第三步,退回到尚有未被访问过的邻接点的顶点,从该顶点出发,重复第二、三步,直到所有被访问过的顶点的邻接点都已被访问为止。为此,用一个栈保存被访问过的结点,以便回溯查找已被访问结点的未被访问过的邻接点。具体函数如下:    #define MAXVEX 100    /定义顶点数的最大值    Void dfs  (Adj List g,int v,int n)    /n表示顶点数        Struct  ArcNode   *stackMAXVEX,*p;    int  visited MAXVEX, top=0,i;    for (i-0,i<n,i+)   visitedti =0;    /结点访问标志均置为O    printf(¨%dn¨,v);    p=gvfirstarc;    while  (top>0|p)        while (p)    if (visitedp->adj vex =0)    p=p->nextarc    /查找下一邻接点    else       printf(¨%dn¨, p->adjvex);    visited p->adjvex =l;    top+;    /将访问过的结点入栈    stacktop =p;    p=g p->adj veX.firstarc;        if (top>0)       p=stack top;    top-;    /退钱,回溯查找已被访问结点的未被访问过的邻接点    p=p->nextarc;                3给定n个村庄之间的交通图。若村庄i与村庄j之间有路可通,则将顶点i与顶点j之间用边连接,边上的权值Wij表示这条道路的长度。现打算在这n个村庄中选择一个村庄建一所医院。试编写一个算法,求出该医院应建在哪个村庄,才能使距离医院最远的村庄到医院的路程最短。    将n个村庄的交通图用邻接矩阵A表示。    【算法思路】先应用弗洛伊德算法计算每对顶点之间的最短路径;然后找出从每一个顶点到其他各顶点的最短路径中最长的路径;最后在这n条最长路径中找出最短的一条。算法如下:    #define n<村庄个数>    int maxminpath (float An n)        int i,j,k;    float s.min=10000;    /最短路径长度min置初值10000    for(k=O;k<n;k+)    /应用弗洛伊德算法计算每对村庄之间的最短路径    for(i=O;i<n;i+)    for(j=0;j<n;j+)    if (Aik+Akj<Aij)    Aij=Aik+Akj;    k=-l;    f。r(i=O; i<n;i+)    /对每个村庄循环一次    s=0;    f。r(j=0;j<n;j+)    /求l村庄到其他村庄最长的一条最短路径    if(Aij>s)    s=Aij;    if (s<min)    /在各最长路径中选最短的一条,将该村庄放在k中    k=i;    min=s;            return k:        4编写一个函数计算给定的有向图的邻接矩阵的每对顶点之间的最短路径。本题实质上就是狄杰斯特拉算法。    【算法思想】假设原点为v:    (l)置集合s的初态为空。    (2)把顶点v放入集合s中。    (3)确定从v开始的n-l条路径。    (4)选择最短距离的顶点u。    (5)把顶点u加入集合s中。    (6)更改距离。    【解答】具体实现如下:    #define MAXVEX 100    /定义顶点数的最大值    void  Shortestpath (int  v,int    cost MAXVEX MAXVEX,  int  dist MAXVEX,  int)/最终的distj(1jn)为从顶点v到项点j之间的最短路径长度    f  int smAXVEXl,i.u,nux,w;    for(i=O;in-l; i+)    /置集合s的初态为空      si=O;    disti =costvi;    s v=1;    /把顶点v放入集合s    dist v =O;    num=0;    while (num<n)    /确定从顶点v开始的n-l条路径       U=Choose(s,dist,n);    su=l;    num+;    /把顶点u放入s    for  (w=0;w<n;w+)    if ( !sw)    if (distu+cost u w <distw)    dist w =distu+costu w;            其中函数choose0的功能是返回满足条件distu=minimum(distw),且sw=0的顶点u。定义如下:    int  choose (int s,int  dist,int n)       int min, i=O,u;    while  (si =1)  i+,    min=dist i;    u=i;    while (i<n)    if(si=1)i+;    else  if (min>disti    u=i;    min=dist i        i+;        return U:     专心-专注-专业

    注意事项

    本文(数据结构-第七章图:习题(共13页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开