Cod sursa(job #1008228)

Utilizator vladm97Matei Vlad vladm97 Data 10 octombrie 2013 17:50:23
Problema Ciclu hamiltonian de cost minim Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#define infinit 1<<23

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<sMin)
    {
        sMin=s;
    }
}

void bkt(int k)
{
    if(k==n)
    {
        test();
    }
    else
    {
        for(int i=0;i<n;i++)
        {
            if(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];
            }
        }
    }
}

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