Cod sursa(job #3195884)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 21 ianuarie 2024 22:56:38
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
int dp[(1 << 18) + 5][19];
int G[20][20];
int main()
{
    int n,i,m,u,v,c,j;
    fin >> n >> m;
    memset(G, 0x3f, sizeof G);
    memset(dp, 0x3f, sizeof dp);
    for(i = 1; i <= m; i++){
        fin >> u >> v >> c;
        G[u][v] = c;
    }
    dp[1][0] = 0;
    for(int k = 1; k < (1 << n); k++){
        for(i = 0; i < n; i++){
            if((1 << i) & k){
                for(j = 0; j < n; j++){
                    if((1 << j) & k) dp[k][i] = min(dp[k][i], dp[k ^ (1 << i)][j] + G[j][i]);
                }
            }
        }
    }
    int rez = 0x3f3f3f3f;
    for(i = 0; i < n; i++) rez = min(rez, dp[(1 << n) - 1][i] + G[i][0]);
    if(rez == 0x3f3f3f3f){
        fout << "Nu exista solutie";
        return 0;
    }
    fout << rez;
    return 0;
}