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

海贼王之伟大航路 - 题解

// Created by ERGO_V on 2025/3/27.

#include <bits/stdc++.h>
using namespace std;
int N;
int matrix[17][17];
int vis[17];
int visland[17];
int minTime = 0;
bool flag = false;

void dfs(long time, int step, int current){

    if(step + 1 == N){
        if(flag == true && time + matrix[current][N] >= minTime){
            return;
        }
        else{
            minTime = matrix[current][N] + time;
            flag = true;
        }
    }

    for(int i = 2; i < N; i ++){
        if(!vis[i]){

            if(flag == true && time + matrix[current][i] >= minTime){
                continue;
            }
            if(i == current)continue;
            vis[i] = 1;
            dfs(time + matrix[current][i], step + 1, i);
            vis[i] = 0;
        }
    }





}

int main(){
    ios::sync_with_stdio(false), cin.tie(nullptr),cout.tie(nullptr);
    cin >> N;
    for(int i = 1; i <=N; i ++){
        for(int j = 1; j <= N; j++){
            cin >> matrix[i][j];
        }
    }
    memset(vis, 0, sizeof(vis));
    dfs(0, 1, 1);
    cout << minTime << endl;


    return 0;
}
0 回复 0 转发 1 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!