Pagini recente » Cod sursa (job #2967299) | Cod sursa (job #1058972) | Cod sursa (job #2980307) | Cod sursa (job #267077) | Cod sursa (job #1008257)
#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 && s+matrix[x[k-1]][i]<sMin)
{
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();
}