题库 模拟押题卷 题目列表 1 #include<cstdio> 2 #includ...
组合题
1 #include<cstdio> 
2 #include<cstring>
3 using namespace std;
4 int n, m; 
5 int f[101][101];
6 intF[101][101]; 
7 int main(){ 
8 scanf("%d%d",&n,&m);//n的值在1到100之间 
9 memset(f,-1,sizeof(f)); 
10 for(int i = 1; i <= m; i++) { 
11     int u,v,w;//w的值在0到10000之间 
12     scanf("%d%d%d",&u,&v,&w); 
13     f[u][v]=f[v][u]=w; 
14 }
15 for(int k = 1; k <= n; k++) 
16     for(int i=1;i <=n; i++) 
17         for(int j=1;j<= n; j++) 
18             if(f[i][k]!=-1&&f[k][j]!=-1) 
19                 if(f[i][j]==-1||f[i][j]>f[k][j]+f[i][k]) 
20                     f[i][j]=f[i][k]+f[k][j]; 
21 int ans=2147483647; 
22 for(int i=1;i<=n;i++) 
23     for(int j=1;j<=n; j++){ 
24         for(int x=1;x<=n; x++) 
25             for(int y=1;y<=n; y++) 
26                 F[x][y]=f[x][y]; 
27         F[i][j]=F[j][i]=0; 
28         for(int x=1;x<= n; x++) 
29             for(int y=1;y<=n; y++) 
30                 if(F[x][y]==-1||F[x][y]>F[x][i]+F[i][y]) 
31                     F[x][y]=F[x][i]+F[i][y]; 
32         for(int x=1;x<=n; x++) 
33             for(int y=1;y<=n; y++) 
34                 if(F[x][y]==-1||F[x][y]>F[x][j]+F[j][y]) 
35                     F[x][y]=F[x][j]+F[j][y]; 
36         int res=0; 
37         for(int x=1;x<=n; x++) 
38             for(int y=1;y<x; y++) 
39                 res +=F[x][y]; 
40         ans=min(res,ans); 
41         }
42 printf("%d\n",ans); 
43 return 0; 
44 }

●判断题

1)(1分)14到16行,将外层到内层的循环变量依次调整为i、j、k,程序的运行的结果不变。(

)

2)这个程序的时间复杂度和m无关。( )

3)20行的ans如果初始化为10^7时,可能无法得到正确结果。( )

4)若将第27到30行的部分和31到34行的两个部分互换,程序的运行的结果不变。( )

●选择题

5)若输入数据为4 5/1 2 3/1 3 6/2 3 4/2 4 7/3 4 2(其中“/”为换行符),则输出为( )。

A.14

B.18

C.21

D.28

6)这个程序使用了( )算法。

A. Floyd

B. Dijkstra

C. Prim

D. Kruskal

第一空(1分):_________________

第二空(2分):_________________

第三空(2分):_________________

第四空(2分):_________________

第五空(3分):_________________

第六空(3分):_________________

第 1 题 填空
第 2 题 填空
第 3 题 填空
第 4 题 填空
第 5 题 填空
第 6 题 填空
题目信息
阅读程序
-
正确率
0
评论
30
点击
QQ
微信