请生成这道题的c++代码:问题描述 平面上有n个城市,你可以在城市之间建造公路或者在城市内建造机场。公路相连的城市是连通的,同时有机场的两个城市是连通的。每修一公里公路费用是D,每造一个机场费用是C。输入所有城市坐标,求使所有城市连通的最小费用。 输入格式 第一行,包含一个整数n,表示城市的个数。 接下去n行,每行一个实数xi。再接下去n行:每行一个实数yi。第i个城市的坐标为(xi, yi)。 接下去两行,每行一个实数,分别为D和C。 输出格式 保留两位小数,为最终答案。
时间: 2024-04-16 22:26:49 浏览: 102
以下是生成的C++代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;
struct City {
double x;
double y;
};
double calculateDistance(City city1, City city2) {
double dx = city1.x - city2.x;
double dy = city1.y - city2.y;
return sqrt(dx*dx + dy*dy);
}
int main() {
int n;
cin >> n;
vector<City> cities(n);
for (int i = 0; i < n; i++) {
cin >> cities[i].x;
}
for (int i = 0; i < n; i++) {
cin >> cities[i].y;
}
double D, C;
cin >> D >> C;
vector<bool> airportBuilt(n, false);
vector<vector<double>> distance(n, vector<double>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
distance[i][j] = calculateDistance(cities[i], cities[j]);
}
}
double totalCost = 0.0;
for (int i = 0; i < n; i++) {
if (!airportBuilt[i]) {
totalCost += C;
airportBuilt[i] = true;
}
for (int j = i + 1; j < n; j++) {
if (!airportBuilt[j]) {
totalCost += C;
airportBuilt[j] = true;
}
totalCost += D * distance[i][j];
}
}
cout << fixed << setprecision(2) << totalCost << endl;
return 0;
}
```
希望能对你有所帮助!如有任何疑问,请随时提问。
阅读全文