Cod sursa(job #429866)

Utilizator DraStiKDragos Oprica DraStiK Data 30 martie 2010 16:03:38
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <algorithm>
using namespace std;

#define INF 0x3f3f3f3f
#define DIM 20

int best[1<<DIM][DIM];
int cost[DIM][DIM];
int n,m,cst;

void read ()
{
    int i,x,y;

    memset (cost,INF,sizeof (cost));
    scanf ("%d%d",&n,&m);
    for (i=1; i<=m; ++i)
    {
        scanf ("%d%d",&x,&y);
        scanf ("%d",&cost[x][y]);
    }
}

void solve ()
{
    int i,j,k;

    memset (best,INF,sizeof (best));
    best[1][0]=0;
    for (i=0; i<(1<<n); ++i)
        for (j=0; j<n; ++j)
            if (i&(1<<j))
                for (k=0; k<n; ++k)
                    if (i&(1<<k))
                        best[i][j]=min (best[i][j],best[i^(1<<j)][k]+cost[k][j]);
    cst=INF;
    for (i=0; i<n; ++i)
        cst=min (cst,best[(1<<n)-1][i]+cost[i][0]);
    printf ("%d",cst);
}

int main ()
{
    freopen ("hamilton.in","r",stdin);
    freopen ("hamilton.out","w",stdout);

    read ();
    solve ();

    return 0;
}