这个程序错在哪哩,啊啊啊啊
查看原帖
这个程序错在哪哩,啊啊啊啊
1646324
win_win_win楼主2025/1/31 10:58
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 20, M = 1 << N;
double w[N][N], dp[M][N];
struct node {
	double x, y;
}e[N];
double dis(node a, node b) {
	return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int main() {
	int n;
	cin >> n;
	n += 1;
	for(int i = 1; i < n; i++) {
		cin >> e[i].x >> e[i].y;
	}
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < n; j++) {
			w[i][j] = dis(e[i], e[j]);
		}
	}
	memset(dp, 0x3f, sizeof(dp));
	dp[1][0] = 0;
	for(int i = 0; i < 1 << n; i++) {
		for(int j = 0; j < n; j++) {
			if(i >> j & 1) {
				for(int k = 0; k < n; k++) {
					if(i >> k & 1) {
						dp[i][j] = min(dp[i][j], dp[i - (1 << j)][k] + w[k][j]);
					}
				}
			}
		}
	}
	double ans = 0x3f3f3f3f;
	for(int i = 1; i < n; i++) {
		ans = min(ans, dp[(1 << n) - 1][i]);
	}
	printf("%.7lf\n", ans);
	return 0;
}
2025/1/31 10:58
加载中...