现在政府计划在某个区域的城市之间建立高速公路,以使得其中任意两个城市之间都有直接或间接的高速公路相连。费用为每千米为一个单位价格,求最小费用。
输入:n(n<=100,表示城市数目)。
接下来n行,每行两个数xi,yi,表示第i个城市的坐标。(单位:千米)。
输出:最小费用(保留2位小数)。
#include<iostream> #include<cstdio> using namespace std; const int maxn = 101; struct tcity { float x, y; }; tcity c[maxn]; float d[maxn][maxn], a, minf; int p[maxn], n, i, j, k; int main() { cin >> n; for (i = 1; i <= n; i++) cin >> c[i].x >> c[i].y; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) d[i][j] = _______(1)_________ p[1] = 0; for (i = 2; i <= n; i++) ______(2)_______ for (i = 1; i <= n-1; i++) { minf = 1E10; for (j = 1; j <= n; j++) { if (______(3)________) { minf = d[p[j]][j]; _______(4)_________ } } a = a + d[p[k]][k]; p[k] = 0; for (j = 1; j <= n; j++) if (______(5)_______) p[j] = k; } printf("%0.2f", a); return 0; }
①处应该填( )
A.sqrt((c[i].x - c[i].y)*(c[i].x - c[i].y) + (c[j].x - c[j].y)*(c[j].x - c[j].y));
B. sqrt((c[i].x - c[j].x)*(c[j].x - c[i].x) + (c[i].y - c[j].y)*(c[j].y - c[i].y));
C. sqrt((c[i].x - c[j].x)*(c[i].x - c[j].x) + (c[i].y - c[j].y)*(c[i].y - c[j].y));
D. sqrt((c[i].x - c[i].y)*(c[j].x - c[j].y) + (c[i].x - c[i].y)*(c[j].x - c[j].y));
②处应填( )
A.p[i]=1; B. p[i]=0; C. p[n-i]=0; D. p[n-i]=0;
③处应填( )
A.p[j]==0 && d[p[j]][j]<minf
B. p[j]!=0 && d[p[j]][j]<minf
C. p[j]==0 || d[p[j]][j]<minf
D. p[j]!=0 || d[p[j]][j]<minf
④处应填( )
A.k=minf; B. k=0; C. k=i; D. k=j;
⑤处应填( )
A.d[p[j]][j]>d[k][j] B. d[p[j]][j]<d[k][j]
C. d[p[i]][j]>d[k][j] D. d[p[i]][j]<d[k][j]