Cod sursa(job #1014304)

Utilizator alinaelenaFMI Colceag Alina alinaelena Data 22 octombrie 2013 13:52:34
Problema Ciclu hamiltonian de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<cstdio>
#define inf 1<<24 
using namespace std;
 
int mat[20][20],v[20],m,n,min,s=0;
int viz[20];

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

 
void bkt(int k)
{
    if(k==n)
    {
        if(s+mat[v[n-1]][v[0]]<min && mat[v[n-1]][v[0]]!=0)
        min=s+mat[v[n-1]][v[0]];
    }
    else
    {
        for(int i=0;i<n;i++)
        {
            if(k!=0&&viz[i]==0&&mat[v[k-1]][i]!=0&&s+mat[v[k-1]][i]<min)
            {
                v[k]=i;
                viz[i]=1;
                s+=mat[v[k-1]][i];
                bkt(k+1);
                viz[i]=0;
                s-=mat[v[k-1]][i];
            }
            else
            {
                if(k==0)
                {
                v[k]=i;
                viz[i]=1;
                bkt(1);
                viz[i]=0;
                }
            }
        }
    }
}
 
void write()
{
    if(min!=inf)
        printf("%d",min);
    else
         printf("Nu exista solutie");
    }

int main()
{
	freopen("hamilton.in","r",stdin);
	freopen("hamilton.out","w",stdout);
	min=inf;
    read();
    bkt(0);
    write();
}