dfs30分求助
查看原帖
dfs30分求助
432183
JoeBiden2020楼主2021/6/5 15:31

记录

#include<bits/stdc++.h>
using namespace std;
float x[20],y[20],minans=555.555;
bool flag=true,went[20];
int n;
float dis(float x1,float y1,float x2,float y2){
    return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
void dfs(float ans,int num){
    if(went[num]==true){
        return;
    }
    flag=true;
    went[num]=true;
    if(ans>minans){
        return;
    }
    ans+=dis(x[num-1],y[num-1],x[num],y[num]);
    for(int i=1;i<=n;i++){
        if(went[i]==false){
            flag=false;
        }
    }
    if(flag=true&&num==n){
        minans=ans;
        for(int i=1;i<=n;i++){
            went[i]=false;
        }
        return;
    }
    else{
        for(int i=1;i<=n;i++){
            dfs(ans,num+1);
        }
    }
    went[num]=false;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
    }
    dfs(0.0,0);
    printf("%.2lf",minans);
    return 0;
}
2021/6/5 15:31
加载中...