11 条题解

  • 1
    @ 2025-3-28 20:05:35
    // 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;
    }
    
    

    信息

    ID
    80
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    368
    已通过
    88
    上传者