Cod sursa(job #1008252)

Utilizator vladm97Matei Vlad vladm97 Data 10 octombrie 2013 18:09:10
Problema Ciclu hamiltonian de cost minim Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#define infinit 1<<24

using namespace std;

int matrix[20][20],x[20],m,n,sMin=infinit,s=0;
bool parcurs[20];
ifstream in("hamilton.in");
ofstream out("hamilton.out");

void read()
{
    int a,b,c;
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        in>>a>>b>>c;
        matrix[a][b]=c;
    }
}
void test()
{
    if(s+matrix[x[n-1]][x[0]]<sMin && matrix[x[n-1]][x[0]]!=0)
    {
        sMin=s+matrix[x[n-1]][x[0]];
    }
}

void bkt(int k)
{
    if(k==n)
    {
        test();
    }
    else
    {
        for(int i=0;i<n;i++)
        {
            if(k!=0 && parcurs[i]==false && matrix[x[k-1]][i]!=0)
            {
                x[k]=i;
                parcurs[i]=true;
                s+=matrix[x[k-1]][i];
                bkt(k+1);
                parcurs[i]=false;
                s-=matrix[x[k-1]][i];
            }
            else
            {
                if(k==0)
                {
                x[k]=i;
                parcurs[i]=true;
                bkt(1);
                parcurs[i]=false;
                }
            }
        }
    }
}

void write()
{
    if(sMin!=infinit)
    {
        out<<sMin;
    }
    else
    {
        out<<"Nu exista solutie";
    }
}
int main()
{
    read();
    bkt(0);
    write();
}