返回题解分享
讨论 / 题解分享/ 帖子详情

海贼王之伟大航路 - 题解

#include <bits/stdc++.h>
using namespace std;
const int N=20;
int n,ans=1e9;
int g[N][N];
int st[N],a[N];  //a[]表示当前第n个到达的岛屿的编号
//当前按顺序到达了第x个岛屿,累计的时间
void dfs(int x,int sum){
    if(sum>ans) return;
    if(x==n-1){
        ans=min(ans,sum+g[a[x]][n]);
        //cout<<ans<<endl;
        return;
    }
    for(int i=1;i<n;i++){
        if(!st[i]){
            st[i]=1;
            a[x+1]=i;
            dfs(x+1,sum+g[a[x]][i]);
            st[i]=0;
            a[x+1]=0;
        }
    }
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>g[i][j];
        }
    }
    st[1]=1;
    a[1]=1;
    dfs(1,0);
    cout<<ans<<endl;
    return 0;
}
0 回复 0 转发 0 喜欢 6 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!