Cod sursa(job #3298273)

Utilizator rapidu36Victor Manz rapidu36 Data 28 mai 2025 17:31:36
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <vector>

using namespace std;

const int INF = 1e8;

int main()
{
    ifstream in("hamilton.in");
    ofstream out("hamilton.out");
    int n, m;
    in >> n >> m;
    vector <vector <int>> c(n);
    for (int i = 0; i < n; i++)
    {
        c[i].resize(n, INF);
    }
    vector <vector <int>> dp(1 << n);
    for (int s = 0; s < (1 << n); s++)
    {
        dp[s].resize(n, INF);
    }
    for (int i = 0; i < m; i++)
    {
        int x, y;
        in >> x >> y;
        in >> c[x][y];
    }
    dp[1][0] = 0;
    for (int s = 3; s < (1 << n); s += 2)
    {
        for (int i = 1; i < n; i++)
        {
            if (s & (1 << i))
            {
                int s_fara_i = (s ^ (1 << i));
                for (int j = 0; j < n; j++)
                {
                    if (s_fara_i & (1 << j))
                    {
                        dp[s][i] = min(dp[s][i], dp[s_fara_i][j] + c[j][i]);
                    }
                }
            }
        }
    }
    int cost = INF, s_total = (1 << n) - 1;
    for (int i = 1; i < n; i++)
    {
        cost = min(cost, dp[s_total][i] + c[i][0]);
    }
    if (cost == INF)
    {
        out << "Nu exista solutie\n";
    }
    else
    {
        out << cost << "\n";
    }
    in.close();
    out.close();
    return 0;
}