5AC5TLE求助
查看原帖
5AC5TLE求助
1380067
your_bug_fired楼主2024/10/20 19:53

不懂就问这道题dfs能做吗,我tle了,有没有大佬用dfsAC了的

#include<bits/stdc++.h>
using namespace std;

#define d double

d distance(d x1, d y1, d x2, d y2){
    return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}

int n = 0;
d ans = 0.0;//记录距离和最小值
d sum = 0.0;//记录不同走法下的距离和
d x[20] = {0.0};
d y[20] = {0.0};
d dis[20][20] = {0.0};//(i,j)之间距离
int s[20] = {0};//记录每一步走的点
bool era[20] = {false};//记录点有没有使用过

void dfs(int num){
    if(num > n){
        ans = min(ans, sum);
        return;
    }
    for(int i = 1; i <= n; i++){
        if(era[i] == false){
            era[i] = true;
            s[num] = i;
            sum += dis[i][s[num - 1]];
            dfs(num + 1);
            sum -= dis[i][s[num - 1]];
            s[num] = 0;
            era[i] = false;
        }
    }
}

int main(){
    cin>>n;
    ans = 1e9 * 1.0;
    for(int i = 1; i <= n; i++){
        cin>>x[i]>>y[i];
    }
    for(int i = 0; i <= n; i++){
        for(int j = i; j <= n; j++){
            dis[i][j] = distance(x[i], y[i], x[j], y[j]);
            dis[j][i] = dis[i][j];
        }
    }
    dfs(1);
    printf("%.2lf", ans);
    return 0;
}
2024/10/20 19:53
加载中...