在一个无环有向图G中,若存在一条从顶点i到顶点j的弧,则在顶点的拓扑序列中,顶点i与顶点j的先后次序是j在前,i在后。
在一个无环有向图G中,若存在一条从顶点i到顶点j的弧,则在顶点的拓扑序列中,顶点i与顶点j的先后次序是j在前,i在后。
参考答案和解析
连通图
相关考题:
●试题六阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】本题将有向网(带权有向图)定义为类AdjacencyWDigraph。类中的数据成员n表示有向网中的顶点数;a为带权邻接矩阵,用于存储有向网中每一对顶点间弧上的权值;c为二维数组,存储有向网中每一对顶点间的最短路径长度;kay为二维数组,存储最短路径,kay[i][j]=k表示顶点i 到达顶点j的最短路径必须经过顶点k。类中的主要成员函数有:Input():输入有向网的顶点数、各条弧及权值,建立带权领接矩阵a。若顶点i到顶点j有弧,则a[i][j]取弧上的权值,否则a[i][j]的值取NoEdge。AllPairs();用弗洛伊德(Floyd)算法求有向网中每一对顶点间的最短路径长度。OutShortestPath(int i,int j):计算顶点i到顶点j的最短路径。outputPath(int i,int j):输出顶点i到顶点j的最短路径上的顶点。Floyd算法的基本思想是递推地产生一个矩阵序列C0,C1,C2,…,Cn,其中C0是已知的带权邻接矩阵,a,Ck(i,j)(0≤i,j<n)表示从顶点i到顶点j的中间顶点序号不大于k 的最短路径长度。如果i到j的路径没有中间顶点,则对于0≤k<n,有Ck(i,j)=C0(i,j)=a[i][j]。递推地产生C1,C2,…,Cn的过程就是逐步将可能是最短路径上的顶点作为路径上的中间顶点进行试探,直到为全部路径都找遍了所有可能成为最短路径上的中间顶点,所有的最短路径也就全部求出,算法就此结束。【C++代码】#includeiostream.h#define NoEdge 10000 //当两个顶点之间没有边相连时,在邻接矩阵中用NoEdge表示void Make2DArray(int * * x,int rows,int cols);class AdjacencyWDigraph{privateint n;//有向网中的顶点数目int**a;//存储顶点间弧上的权值int**c;//存储计算出的最短路径长度int**kay;//存储求出的最短路径pubic:int Vertices()const {return n;}void AllPairs();void Input();//输入有向网的顶点数、各条弧及权值,建立邻接矩阵avoid OutShortestPath(int i,int j);//计算顶点i到j的最短路径(试卷中未列出)~AdjacencyWDigraph();//析构函数(试卷中未列出)private:void outputPath(int i,int j);};void AdjacencyWDigraph::AllPairs(){int i,j,k,t1,t2,t3;for(i=1;i<=n;k++)for(j=1;j<=n;++j){c[i][j]= (1) ;kay[i][j]=0;}for(k=1;k<=n;k++)for(i=1;i<=n;i++){if(i==k) continue;t1=c[i][k];for(j=1;j<=n;j++){if(j==k||j==i)continue;t2=c[k][j];t3=c[i][j];if(t1!=NoEdge t2!=NoEdge (t3==NoEdge||t1+t2<t3)){c[i][j]= (2) ;kay[i][j]= (3) ;}}//for}//for}void AdjacencyWDigraph:: outputPath(int i,int j){//输出顶点i到j的最短路径上的顶点if(i==j)return;if(kay[i][j]==0)cout<<j<<′′;else { outputPath(i, (4) ); outputPath( (5) );}}void Adjacency WDigraph::Input(){int i,j,u,v,w,E;cout<<″输入网中顶点个数:″;cin>>n;cout<<″输入网中弧的个数:″;cin>>E;Make2DArray(a,n+1,n+1);for(i=1;i<=n;i++)for(j=1;j<=n;j++)a[i][j]=NoEdge;for(i=1;i<=n;i++)a[i][i]=0;Make2DArray(c,n+1,n+1);Make2DArray(kay,n+1,n+1);for(i=1;i<=E;i++){cout<<″输入弧的信息(起点终点权值):″;cin>>u>>v>>w;a[u][v]=w;}}void Make2DArray(int**x,int rows,int cols){int i,j;x=new int*[rows+1];for(i=0;i<rows+1;i++)x[i]=new int [cols+1];for(i=1;i<=rows;i++)for(j=1;j<=cols;j++=x[i][j]=0;}
● 拓扑排序是指有向图中的所有顶点排成一个线性序列的过程,若在有向图中从顶点vi到vj有一条路径,则在该线性序列中,顶点 vi 必然在顶点 vj之前。因此,若不能得到全部顶点的拓扑排序序列,则说明该有向图一定 (57)(57)A. 包含回路B. 是强连通图C. 是完全图D. 是有向树
设一个包含N个顶点、E条边的简单有向图采用邻接矩阵存储结构(矩阵元素A[i][j]等于1/0分别表示顶点i与顶点j之间有/无弧),则该矩阵的元素数目为(58),其中非零元素数目为(59)。A.E2B.N2C.N2-E2D.N22+E2
阅读下列说明和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)
●设一个包含N 个顶点、E 条边的简单无向图采用邻接矩阵存储结构(矩阵元素 A[i][j]等于1/0 分别表示顶点i与顶点 j 之间有/无边),则该矩阵中的非零元素数目为 (60)。(60)A.NB.EC.2ED.N+E
● 设一个包含N个顶点、 E条边的简单有向图采用邻接矩阵存储结构 (矩阵元素A[i][j]等于1/0分别表示顶点i与顶点j之间有/无弧),则该矩阵的元素数目为 (60) ,其中非零元素数目为 (61) 。
B 宽度优先(种子染色法)5.关键路径几个定义: 顶点1为源点,n为汇点。a. 顶点事件最早发生时间Ve[j], Ve [j] = max{ Ve [j] + w[I,j] },其中Ve (1) = 0;b. 顶点事件最晚发生时间 Vl[j], Vl [j] = min{ Vl[j] – w[I,j] },其中 Vl(n) = Ve(n);c. 边活动最早开始时间 Ee[I], 若边I由j,k表示,则Ee[I] = Ve[j];d. 边活动最晚开始时间 El[I], 若边I由j,k表示,则El[I] = Vl[k] – w[j,k];若 Ee[j] = El[j] ,则活动j为关键活动,由关键活动组成的路径为关键路径。求解方法:a. 从源点起topsort,判断是否有回路并计算Ve;
拓扑序列是有向无环图中所有顶点的一个线性序列,若有向图中存在弧或存在从顶点v到w的路径,则在该有向图的任一拓扑序列中,V一定在w之前。下面有向图的拓扑序列是( )A.41235B.43125C.42135D.41=325
拓扑序列是无环有向图中所有顶点的一个线性序列,图中任意路径中的各个顶点在该图的拓扑序列中保持先后关系。对于图中的有向图, ( ) 不是其的一个拓扑序列。A.1526374B.1526734C.5123764D.5126374
拓扑序列是有向无环图中所有顶点的一个线性序列,若有向图中存在弧或存在从顶点v到w的路径,则在该有向图的任一拓扑序列中,v一定在w之前。下面有向图的拓扑序列是( )。A.41235B.43125C.42135D.41325
设一个包含N个顶点、E条边的简单无向图采用邻接矩阵存储结构(矩阵元素A[i][j]等于I/O分别表示顶点i与顶点j之间有/无边),则该矩阵中的非零元素数目为( )。A.NB.EC.2ED.N+E
设一个包含n个顶点、e条弧的简单有向图采用邻接矩阵存储结构(即矩阵元素A[i][j]团等于1或0,分别表示顶点i与顶点j之间有弧或无弧),该矩阵购非零元素数目为( )。A.eB.2eC.n-eD.n+e
填空题若在有向图G中存在一条弧i,Vj,则称顶点Vj()于顶点Vi。