求神犇帮忙
程序如下:
#include<bits/stdc++.h>
using namespace std;
int n;
bool vis[20];
double ans = 1e10;
double x[20], y[20];
void dfs (int num, int k, double sum) {
if (sum >= ans) return;
if (k - 1 == n) {
ans = min(ans, sum);
return;
}
for (int i = 1; i <= n; i++) {
if (vis[i]) continue;
vis[i] = true;
dfs(i, k + 1, sum + sqrt((x[num] - x[i]) * (x[num] - x[i]) + (y[num] - y[i]) * (y[num] - y[i])));
vis[i] = false;
}
}
int main () {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lf%lf", &x[i], &y[i]);
}
dfs(0, 1, 0.0);
printf("%.2lf", ans);
return 0;
}
下面是第 10 个测试点,这个程序跑了三十多秒...
15
0 0
1 1
1 -1
-1 1
-1 -1
2 2
2 0
2 -2
0 -2
-2 -2
-2 0
-2 2
0 2
1 3
1 4
答案:
21.73
例外还 TLE 了 12,13 两个点,求助神犇!!