P1433 喫奶酪

 

#define fr first
#define sc second
const int N=222+5;

    int n,m,t;
    int i,j,k;
    double minn;
    pair<double,double> p[N];
    double dis[N][N];
    bool vis[N];

void DFS(int num,int now,double len) //已經喫過 num 塊奶酪,當前處於 now 的位置及本次搜索的答案
{
    if(len>=minn) return ; //最優性剪枝
    if(num==n){ minn=min(minn,len); return ;}

    for(int i=1;i<=n;i++){
        if(!vis[i]){
            vis[i]=1;
            DFS(num+1,i,len+dis[now][i]);
            vis[i]=0;
        }
    }
}
int main()
{
    //IOS;
    while(cin>>n){
        for(i=1;i<=n;i++){
            cin>>p[i].fr>>p[i].sc;
        }
        p[0].fr=p[0].sc=0;
        for(i=0;i<=n;i++){
            for(j=0;j<=n;j++){
                dis[i][j]=sqrt( (p[i].fr-p[j].fr)*(p[i].fr-p[j].fr) + (p[i].sc-p[j].sc)*(p[i].sc-p[j].sc) );
            }
        }
        minn=inf;
        DFS(0,0,0);
        pf(minn);
    }
    //PAUSE;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章