Cod sursa(job #3284982)

Utilizator mihai_bosIancu Mihai mihai_bos Data 12 martie 2025 13:34:59
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#define INF 1000000000

using namespace std;

ifstream cin("hamilton.in");
ofstream cout("hamilton.out");

int c[20][20], n, m, dp[(1<<19)][20];

int main()
{
    int i , j;
    cin >> n >> m;
    while(m--) {
        int x, y, z;
        cin >> x >> y >> z;
        c[x][y] = z;
    }
    for(i=0;i<(1<<n);++i)
        for(j=0;j<n;++j) dp[i][j]=INF;
    dp[1][0] = 0;
    for(int mask = 0; mask < (1 << n); ++mask) {
        for(i = 0; i < n; ++i)
            if(mask & (1 << i))
                for(j = 0; j < n; ++j)
                    if(c[i][j] && !((1<<j)&mask))
                        dp[mask + (1<<j)][j] = min(dp[mask + (1<<j)][j], dp[mask][i] + c[i][j]);
    }
    int ans = INF;
    for(int i = 0; i < n; ++i)
        if(c[i][0])
        ans = min(ans, dp[(1<<n) - 1][i] + c[i][0]);

    if(ans == INF)
        cout << "Nu exista solutie";
    else
        cout << ans;

    return 0;
}