Cod sursa(job #632629)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 11 noiembrie 2011 21:00:02
Problema Ciclu hamiltonian de cost minim Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <algorithm>
#define N 19
#define mult 2000000000

using namespace std;

int n, m, a[N][N], minim = mult, suma;
bool viz[N];

void citire()
{
    scanf ("%d %d ", &n, &m);
    for (int i = 1; i <= 10; ++ i)
    {
        int x, y, c;
        scanf ("%d %d %d ", &x, &y, &c);
        a[x][y] = c;
    }
}

bool vizitate()
{
    for (int i = 1; i < n; ++ i)
        if (viz[i] == 0)
            return 0;
    return 1;
}

void verif(int nod)
{
    if (vizitate() && a[nod][0] > 0)
    {
        suma += a[nod][0];
        minim = min (minim, suma);
        suma -= a[nod][0];
        return;
    }
    for (int j = 1; j <= n; ++ j)
        if (!viz[j] && a[nod][j] > 0)
        {
            viz[j] = 1;
            suma += a[nod][j];
            verif (j);
            suma -= a[nod][j];
            viz[j] = 0;
        }
}

int main()
{
    freopen ("hamilton.in", "r", stdin);
    freopen ("hamilton.out", "w", stdout);
    citire();
    verif (0);
    if (minim != mult)
        printf ("%d\n", minim);
    else
        printf ("Nu exista solutie\n");
    return 0;
}