Cod sursa(job #920400)

Utilizator flemixFiru Denis flemix Data 20 martie 2013 12:17:02
Problema Ciclu hamiltonian de cost minim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
int n,m,i,j,a[20][20],x,y,c,k,ct,vmin,z[20],viz[20];
void back(int k,int ct,int &vmin,int z[],int n,int viz[])
{
    int i;
    if(k==n+1)
    {
        if(ct+a[z[n]][1]<vmin)
        {
            vmin=ct+a[z[n]][1];
        }
    }
    else
    {
        for(i=1;i<=n;i++)
        {
            if(viz[i]==0 && ct+a[z[k-1]][i]<vmin)
            {
                z[k]=i;
                viz[i]=1;
                back(k+1,ct+a[z[k-1]][i],vmin,z,n,viz);
                viz[i]=0;
            }
        }
    }
}
int main()
{
    freopen("hamilton.in","r",stdin);
    freopen("hamilton.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            a[i][j]=1000000000;
        }
        a[i][i]=0;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d %d %d",&x,&y,&c);
        a[x+1][y+1]=c;
    }
    z[1]=1;
    viz[1]=1;
    vmin=1000000000;
    back(2,0,vmin,z,n,viz);
    printf("%d",vmin);
    return 0;
}