Cod sursa(job #2444508)

Utilizator DavidLDavid Lauran DavidL Data 31 iulie 2019 17:15:15
Problema Ciclu hamiltonian de cost minim Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("hamilton.in");
ofstream fo("hamilton.out");

const int INF = 1e8;

int n, m;
int C[20][20];
int minim = INF;
bool f[20];
int v[20];

void bkt(int poz)
{
    if (poz > n)
    {
        if (!C[v[n]][v[1]])
            return;

        int aici = 0;
        for (int i = 1; i < n; i++)
            aici += C[v[i]][v[i + 1]];
        aici += C[v[n]][v[1]];
        minim = min(minim, aici);
        return;
    }

    for (int i = 1; i <= n; i++)
        if (!f[i] && (poz == 1 || C[v[poz - 1]][i]))
        {
            v[poz] = i;
            f[i] = 1;
            bkt(poz + 1);

            f[i] = 0;
            v[poz] = 0;
        }
}

int main()
{
    fi >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int u, v, c;
        fi >> u >> v >> c;
        u++; v++;
        C[u][v] = c;
    }

    bkt(1);

    if (minim == INF)
        fo << "Nu exista solutie";
    else
        fo << minim;

    return 0;
}