拓扑排序找入度为0的点,删去与其相连的所有边,不断重复这一过程。例 寻找一数列,其中任意连续p项之和为正,任意q 项之和为负,若不存在则输出NO.

题目

拓扑排序

找入度为0的点,删去与其相连的所有边,不断重复这一过程。

例 寻找一数列,其中任意连续p项之和为正,任意q 项之和为负,若不存在则输出NO.


相似考题

4.阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】对有向图进行拓扑排序的方法是:(1)初始时拓扑序列为空;(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧;(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。函数int*TopSort(LinkedDigraph G)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶点序列为vl,v2,…,vn,图G采用邻接表表示,其数据类型定义如下:define MAXVNUM 50 /*最大顶点数*/typedef struct ArcNode| /*表结点类型*/int adjvex; /*邻接顶点编号*/struct ArcNode*nextarc; /*指示下一个邻接顶点*/{ArcNode;typedef struct AdjList{ /*头结点类型*/char vdata; /*顶点的数据信息*/ArcNode*firstarc; /*指向邻接表的第一个表结点*/}AdjList;typedef struct LinkedDigraph /*图的类型*/int n: /*图中顶点个数*/AdjList Vhead[MAXVNUM]; /*所有顶点的头结点数组*/}LinkedDigraph;例如,某有向图G如图4-1所示,其邻接表如图4-2所示。函数TopSort中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如下表所示:【C代码】int*TopSort(LinkedDigraph G){ArcNode*P; /*临时指针,指示表结点*/Queue Q; /*临时队列,保存入度为0的顸点编号*/int k=0; /*临时变量,用作数组元素的下标*/int j=0,w=0; /*临时变量,用作顶点编号*/int*topOrder,*inDegree;topOrder=(int*)malloc((G.n+1)*sizeof(int));/*存储拓扑序列中的顶点编号*/inDegree=(int*)malloc((G.n+1)*sizeof(int));/*存储图G中各顶点的入度*/if(!inDegree||!topOrder) return NULL;(1); /*构造一个空队列*/for(j=1;j<=Gn;j++){ /*初始化*/topOrder[j]=0;inDegree[j]=0;}for(j=1;j<=Gn;j++) /*求图G中各顶点的入度*/for(p=G.Vhead[j].firstarc;p;p=p->nextarc)inDegree[P->adjvex]+=1;for(j=i;j<=G.n;J++) /*将图G中入度为0的顶点保存在队列中*/if(0==inDegree[j]) EnQueue(&Q,j);while(! IsEmpty(Q)){(2); /*队头顶点出队列并用w保存该顶点的编号*/topOrder[k++]=w; /*将顶点W的所有邻接顶点的入度减l(模拟删除顶点w及该顶点出发的弧的操作)*/for(p=G.Vhead[w].firstarc;p;p=p->nextarc){(3)-=1;if(0== (4) ) EnQueue(&Q,P->adjvex);}/*for*/}/ * while*/free(inDegree);if( (5) )return NULL;return topOrder;}/*TopSort*/根据以上说明和C代码,填充C代码中的空(1)

更多“拓扑排序 找入度为0的点,删去与其相连的所有边,不断重复这一过程。例 寻找一数列,其中任意连 ”相关问题
  • 第1题:

    拓扑排序算法中,必须使用队列来存放入度为0的顶点。


    正确

  • 第2题:

    对n个顶点的有向图G,采用邻接表存储,请回答下列有关问题: (1)如何求图中的边数? (2)如何判断顶点i到顶点j是否有边相连? (3)如何求任意一个顶点i的入度?


    ( 1 )累加每个边单链表中的节点个数即为边数。 ( 2 )判断第 i 个边单链表中是否有顶点 j 的节点,若有表示顶点 i 到顶点 j 有边,否则没有边。 ( 3 )扫描所有边单链表,累加顶点 i 的节点个数即为顶点 i 的入度。

  • 第3题:

    14、关于拓扑排序,下列说法正确的是()。

    A.所有连通的有向图都可以实现拓扑排序

    B.对同一个图而言,拓扑排序序列是唯一的

    C.拓扑排序中入度为0的结点总会排在入度大于0的结点的前面

    D.拓扑排序序列中的第一个结点一定是入度等于0的结点

    E.可以用拓扑排序算法来判断有向图中是否存在环

    F.如果有向图的拓扑排序序列是唯一的,则图中必定只有一个顶点的入度为0,一个顶点的出度为0。

    G.在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。

    H.若有向图的拓扑有序序列唯一,则图中每个顶点的入度和出度最多为1。


    拓扑排序序列中的第一个结点一定是入度等于0的结点;可以用拓扑排序算法来判断有向图中是否存在环;如果有向图的拓扑排序序列是唯一的,则图中必定只有一个顶点的入度为0,一个顶点的出度为0。;在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。

  • 第4题:

    12、关于拓扑排序,下列说法正确的是()。

    A.所有连通的有向图都可以实现拓扑排序

    B.对同一个图而言,拓扑排序序列是唯一的

    C.拓扑排序中入度为0的结点总会排在入度大于0的结点的前面

    D.拓扑排序序列中的第一个结点一定是入度等于0的结点

    E.可以用拓扑排序算法来判断有向图中是否存在环

    F.如果有向图的拓扑排序序列是唯一的,则图中必定只有一个顶点的入度为0,一个顶点的出度为0。

    G.在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。

    H.若有向图的拓扑有序序列唯一,则图中每个顶点的入度和出度最多为1。


    拓扑排序序列中的第一个结点一定是入度等于0的结点;可以用拓扑排序算法来判断有向图中是否存在环;如果有向图的拓扑排序序列是唯一的,则图中必定只有一个顶点的入度为0,一个顶点的出度为0。;在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。

  • 第5题:

    在图的拓扑排序过程中,输出的顶点应该满足________。

    A.入度为1

    B.出度为1

    C.入度为0

    D.出度为0


    入度为 0