我发现这个问题在某个比赛的某个地方,还没有能够拿出一个解决方案呢。找到最低需求量的气体容器
有N个城市坐标(x,y)的。我必须从第一个 城市去到第二个城市。每个城市都有一个加油站。 所以我必须找到最低容量的气柜达到 最后的城市。 例如:
Input:
3
17 4
19 4
18 5
Output:
1.414
在这里,我的办法是:1->3->2
我使用的是简单的穷举法,但它这么慢。我如何优化我的代码? 也许有更好的解决方案?
#include <iostream>
#include <algorithm>
#include <stack>
#include <math.h>
#include <cstring>
#include <iomanip>
#include <map>
#include <queue>
#include <fstream>
using namespace std;
int n, used[203];
double min_dist;
struct pc {
int x, y;
};
pc a[202];
double find_dist(pc a, pc b) {
double dist = sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));
return dist;
}
void functio(double d, int used[], int k, int step) {
used[k] = 1;
if(k == 1) {
if(d < min_dist) {
min_dist = d;
}
used[k] = 0;
return;
}
for(int i = 1; i < n; ++i) {
if(i != k && used[i] == 0) {
double temp = find_dist(a[k], a[i]);
if(temp > d) {
if(temp < min_dist)
functio(temp, used, i, step + 1);
}
else {
if(d < min_dist)
functio(d, used, i, step + 1);
}
}
}
used[k] = 0;
}
int main() {
cin >> n;
for(int i = 0; i < n; ++i)
cin >> a[i].x >> a[i].y;
min_dist = 1000000;
memset(used, 0, sizeof(used));
functio(0, used, 0, 0);
cout << fixed << setprecision(3) << min_dist << endl;
}
看一看在[旅行商问题(https://en.wikipedia.org/wiki/Travelling_salesman_problem) – Nidhoegger
考虑在HTTP发布您的问题://codereview.stackexchange .com – Renzo
你的算法实际上是否正确?我的意思是它通过了测试?另外,这些城市如何相互联系?他们是否都用直线连接到所有其他人?另外考虑链接你发现这个问题的来源。 – dingalapadum