网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

在用Floyd 算法求解各顶点的最短路径时,每个表示两点间路径的pathk-1[I,J]一定是pathk [I,J]的子集(k=1,2,3,…,n)。()


参考答案和解析
×
更多 “在用Floyd 算法求解各顶点的最短路径时,每个表示两点间路径的pathk-1[I,J]一定是pathk [I,J]的子集(k=1,2,3,…,n)。()” 相关考题
考题 ●试题六阅读以下说明和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;}

考题 ●下面算法是实现对n个整数的序列进行选择排序,其中序列的"长度"n为问题的规模。该算法的时间复杂度为 (23) 。void select_sort(int a[],int n){//将a中整数序列重新排列成从小到大有序的整数序列for(i=0;in-1;++i){j=i;for(k=i+1;kn;++k)if(a[k]a[j])j=k;if(j!=i){w=a[j];a[j]=a[i];a[i]=w;}}//select- sort(23) A.O(n3)B.O(n2)C.O(n)D.O(n4)

考题 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。【说明】设某城市有n个车站,并有m条公交线路连接这些车站,设这些公交车都是单向的,这n个车站被顺序编号为0至n-1。输入该城市的公交线路数、车站个数,以及各公交线路上的各站编号,求得从站0出发乘公交车至站n-1的最少换车次数。程序利用输入信息构建一张有向图G(用邻接矩阵g表示),有向图的顶点是车站,若有某条公交线路经i站能到达j站,就在顶点i到顶点j之间设置一条权为1的有向边<i,j>。如是这样,从站点x至站点y的最少上车次数便对应图G中从点x至点y的最短路径长度。而程序要求的换车次数就是上车次数减1。【函数5-9】include <stdio.h>define M 20define N 50int a[N+1]; /*用于存放一条线路上的各站编号*/iht g[N][N]; /*存储对应的邻接矩阵*/int dist[N]; /*存储站0到各站的最短路径*/int m,n;void buildG(){int i,j,k,sc,dd;printf ("输入公交线路数,公交站数\n");scanf("%d%d", m, n);for(i=0; i<n; i++) /*邻接矩阵清0*/for(j = 0; j < n; j++)g[i][j] = 0;for(i=0; i<m; i++){printf("沿第%d条公交车线路前进方向的各站编号(O<=编号<=%d,-1结束):\n",i+1, n-1);sc=0;/* 当前线路站计数器 */while(1){scanf("%d",dd);if(dd==-1)break;if(dd>=0 dd<n) (1);}a[sc]=-1;for(k=1;a[k]>=0; k++) /* 处理第i+1条公交线路 */for(j=0; j<k; j++)g(2)=1;}}int minLen(){int j, k;for(j=0;j<n;j++)dist[j]=g[0][j];dist[0]=1;do{for(k=-1,j=0;j<n;j++) /* 找下一个最少上车次数的站*/if(dist[j]>0(k==-1 || dist[j]<dist[k]))k=j;if (k<0 || k==n-1) break;dist[k]=-dist[k]; /* 设置k站已求得上车次数的标记 */for(j=1;j<n;j++) /* 调整经过k站能到达的其余各站的上车次数 */if ((3) (dist[j]==0 || -dist[k]+1<dist[j]))dist[j]=(4);}while(1);j=dist[n-1];return (5);}void main(){int t;buildG();if((t=minLen()<0)printf("无解!\n");else pdnff("从0号站到%d站需换车%d次\n”,n-1,t);}

考题 阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。【说明】程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。【程序】define N 10main(){void (1);int i,a[N];for(i=0;i<10,i++) /*输入*/scanf(“%d”,a[i]);(2);for(i=0;i<N,i++) /*输出*/printf(“%3d”,a[i]);}void selectSon(int x[],int n){int i,j,k,t;for(int i=0; (3);i++){k=i;for(j=i+1;j<n;j++)if (4) k=j;if (5){t=x[i];x[i]=x[k];x[k] =t;}}}

考题 下面哪些使用的不是贪心算法()A.单源最短路径中的Dijkstra算法B.最小生成树的Prim算法C.最小生成树的Kruskal算法D.计算每对顶点最短路径的Floyd-Warshall算法

考题 利用动态规划方法求解每对结点之间的最短路径问题(a11 pairs shortest path problem)时,设有向图G=<V,E>共有n个结点,结点编号1~n,设C是G的成本邻接矩阵,用Dk(i,j)表示从i到j并且不经过编号比众还大的结点的最短路径的长度(Dn(i,j即为图G中结点i到j的最短路径长度),则求解该问题的递推关系式为(56)。A.Dk(i,j);Dk-1(i,j)+C(i,j)B.Dk(i,j):min{Dk-1(i,j),Dk-1(i,j)+C(i,j)}C.Dk(i,j):Dk-1(i,k)+Dk-1(i,j)D.Dk(i,j);min{Dk-1(i,j),Dk-1(i,k)+Dk-1(k,j)}

考题 已知有一维数组A[0...m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系______可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。A.i=k/n,j=k%mB.i=k/m,j=k%mC.i=k/n,j=k%nD.i=k/m,j=k%n

考题 关于建立邻接矩阵的问题 #include stdio.hvoid Create(){ char vexs[100]={NULL}; int eages[100][100]={0}; int n,e,m,i,j,k; printf("请输入所要创建的图的顶点个数和边数:"); scanf("%d%d", printf("请输入所创建的图的顶点信息:\n"); for(i=0;in;i++) { scanf("%c", vexs[i]=m; } for(i=0;in;i++) for(j=0;jn;j++) eages[i][j]=0; //初始化矩阵 printf("请输入各条边的两个顶点的编号:\n"); for(k=0;ke;k++) { //fflush(stdin); scanf("%d%d", //fflush(stdin); eages[i][j]=1; eages[j][i]=1; } for(i=1;i=n;i++) { for(j=1;j=n;j++) printf("%d",eages[i][j]); printf("\n"); }}void main(){ Create();}我输入的是7 71 2 3 4 5 6 71 2 1 3 2 4 2 5 3 6 4 7 5 7 为什么输出的矩阵不对,只有前三行对了,后面几行总是不对,求高手解释啊~~

考题 试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。

考题 阅读下列说明,回答问题l和问题2,将解答填入答题纸的对应栏内。【说明】现需在某城市中选择一个社区建一个大型超市,使该城市的其他社区到该超市的距离总和最小。用图模型表示该城市的地图,其中顶点表示社区,边表示社区间的路线,边上的权重表示该路线的长度。现设计一个算法来找到该大型超市的最佳位置:即在给定图中选择一个顶点,使该顶点到其他各顶点的最短路径之和最小。算法首先需要求出每个顶点到其他任一顶点的最短路径,即需要计算任意两个顶点之间的最短路径;然后对每个顶点,计算其他各顶点到该顶点的最短路径之和;最后,选择最短路径之和最小的顶点作为建大型超市的最佳位置。下面是求解该问题的伪代码,请填充其中空缺的(1)至(6)处。伪代码中的主要变量说明如下:W:权重矩阵n:图的顶点个数sP:最短路径权重之和数组,SP[i]表示顶点i到其他各顶点的最短路径权重之和,i从1到nrain_SP:最小的最短路径权重之和min_v:具有最小的最短路径权重之和的顶点i:循环控制变量j:循环控制变量k:循环控制变量LOCATE-SHOPPINGMALL(W,n)1 D(0)=W2 for(1)3 for i=1 t0 n4 for j=1 t0 n56 (2)7 else8 (3)9 for i=1 to n10 sP[i] =O11 for j=1 to n12 (4)13 min sP=sP[1]14 (5)15 for i=2 t0 n16 if min sPsP[i]17 min sP=sP[i]18 min V=i19 return (6)

考题 已知i、j、k为整型变量,若从键盘输入1,2,3,使i的值为1、j的值为2、k的值为3,以下选项中正确的 已知i、j、k为整型变量,若从键盘输入1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( )。A.scanf("%2d%2d%2d",i,j,k);B.scanf("%d %d %d",i,j,k);C.scanf("%d,%d,%d",i,j,k);D.scanf("i=%d,j=%d,k=%d",i,j,k);

考题 利用动态规划法求解每对节点之间的最短路径问题时,设有向图G=共有n个节点,节点编号1~n,设C 利用动态规划法求解每对节点之间的最短路径问题时,设有向图G=<V,E>共有n个节点,节点编号1~n,设C是G的成本邻接矩阵,用Dk(i,j)表示从i到j并且不经过编号比k还大的节点的最短路径的长度(Dn(i,j)即为图G中节点i到j的最短路径长度),则求解该问题的递推关系式为(28)。A.Dk(i,j)=Dk-1(i,j)+C(i,j)B.Dk(i,j)=min{Dk-1(i,j),Dk-1(i,j)+C(i,j)}C.Dk(i,j)=Dk-1(i,k)+Dk-1(k,j)D.Dk(i,j)=min{Dk-1(i,j),Dk-1(i,k)+Dk-1(k,j)}

考题 阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]这是一个求解Josephus问题的函数。用整数序列1,2,3…,n表示顺序围坐在圆桌周围的人,并采用数组表示作为求解过程中使用的数据结构。Josephus问题描述,设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,…如此反复直到所有的人全部出局为止。[C函数]void Josephus(int A[],int n,s,m)(int i,j,k,temp;if(m==O){printf("m=0是无效的参数!\n");return;}for(i=0;i<n;i++) A[i]=i+1; /*初始化,执行n次*/i= (1) /*报名起始位置*/for(k=n;k>1;k-){if((2)) i=0;i=(3) /*寻找出局位置*/if(i!=k-1){tmp=A[i];for(j=i;J<k-1;j++) (4);(5);}}for(k=0;k<n/2;k++){tmp=A[k];A[k]=A[n-k+1];A[n-k+1]=tmp;}}

考题 下面程序段的执行结果为( )。 int i=3,j=0,k=0; for(;i>0;--i) { ++k; do { ++j; if (i!=j) break; ++k; }while(j<5); } printf("i=%d j=%d k=%d\n",i,j,k);A.i=0 j=4 k=12B.i=0 j=5 k=5C.i=0 j=4 k=4D.i=0 j=3 k=3

考题 下面算法是实现对n个整数的序列进行选择排序,其中序列的“长度”n为问题的规模。该算法的时间复杂度为(11)。 void select_sort(int a[],int n){ //将a中整数序列重新排列成从小到大有序的整数序列 for(i=0;i<n-1;++i){ j=i; for(k=i+1;k<n;++k)if(a[k]<a[j])j=k; if(j!=i){w=a[j];a[j];a[i];a[i]=w} )//select_sortA.O(n2)B.O(n3)C.O(n4)D.O(n)

考题 分析下列程序,其最终执行结果是______。 main() { int n[3],i,j,k; for(i=0;i<3;i++)n[i]=O; k=2; for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=n[i]-1; printf("%d\n",n[0]); }A.-2B.-1C.0D.-3

考题 已知i、j、k为int型变量,若从键盘输入:1,2,3,使i的值为1、j的值为2、k的值为3,以下选项中正确 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是A.scanf(“%2d%2d%2d”,i,j,k);B.scanf(“%d%d%d”,i,j,k);C.scant(“%d,%d,%d”,i,j,k);D.scanf(“i=%d,j=%d,k=%d”,i,j,k);

考题 请读程序: include main( ) { int n[2],i,j,k; { for(i=0,i 请读程序: # include<srdio.h> main( ) { int n[2],i,j,k; { for(i=0,i<2;i + + )n[i]=0; k=2; for(i=0;i<k;i+ +) {for(j=0;j<k;j+ +)n[j]=n[i]+l; print{("%d\n",n[k]); } 上面程序片段输出结果是 ( )A.不确定的值B.3C.23D.1

考题 最短路径A.标号法求解单源点最短路径:vara:array[1..maxn,1..maxn] of integer;b:array[1..maxn] of integer; {b[i]指顶点i到源点的最短路径}mark:array[1..maxn] of boolean;procedure bhf;varbest,best_j:integer;

考题 B.Floyed算法求解所有顶点对之间的最短路径:procedure floyed;

考题 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;

考题 利用动态规划方法求解每对节点之间的最短路径问题(all pairs shortest path problem)时,设有向图 G=<V,E>共有n个节点,节点编号1~n,设C是G的成本邻接矩阵,用Dk(I,j)即为图G中节点i到j并且不经过编号比k还大的节点的最短路径的长度(Dn(i,j)即为图G中节点i到j的最短路径长度),则求解该问题的递推关系式为(62)。A.Dk(I,j)=Dk-1(I,j)+C(I,j)B.Dk(I,j)=Dk-1(I,k)+Dk-1(k,j)C.Dk(I,j)=min{Dk-1(I,j),Dk-1(I,j)+C(I,j)}D.Dk(I,j)=min{Dk-1(I,j),Dk-1(I,K)+Dk-1(k,j)}

考题 已知有一维数组A(0..m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系(4)可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。A.i=k/n,j=k%mB.i=k/m,j=K%mC.i=k/n,j=k%nD.i=k/m,j=k%n

考题 已知有一维数组A[0.m×n-1],若要对应为m行n列的矩阵,则下面的对应关系(),可将元素A[k](O≤<k≤<m×n)表示成矩阵的第i行、第j列的元素(0≤i≤m,0匀≤n)。 A. i=k/n,j=k%m B.i=k/m,j=k%m C.i=k/n,j=k%n D.i=k/m,j=k%n

考题 下列程序段的时间复杂度为()。for(i=0;i<m;i++)for(j=0;j<t;j++)e[i][j]=0;for(i=0;i<m;i++)for(j=0;j<t;j++)for(k=0;k<n;k++)c[i][j]_c[i][j]+a[i][k]×b[k][j];A.O(m×n×t) B.O(m+n+t) C.O(m×t+n) D.O(m+n×t)

考题 用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度()的次序来得到最短路径的。

考题 填空题用Dijkstra算法求某一顶点到其余各顶点间的最短路径是按路径长度()的次序来得到最短路径的。

考题 单选题求解最短路径的Floyd算法的时间复杂度为( )。A O(n)B O(n+c)C O(n*n)D O(n*n*n)