Pagini recente » Cod sursa (job #1591469) | Cod sursa (job #2590630) | Cod sursa (job #2828411) | Cod sursa (job #2028565) | Cod sursa (job #693359)
Cod sursa(job #693359)
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
#define PB push_back
#define MKP make_pair
#define INF 0x3f3f3f3f
int N , M , cost , minim , costt[20][20];
bool muchie[20][20];
int x[20];
bool valid (int k)
{
for (int i = 1 ; i < k ; ++i)
for (int j = i + 1 ; j <= k ; ++j)
if (x[i] == x[j])
return 0;
return 1;
}
bool ok (int k)
{
if (!muchie[x[k]][x[1]]) return 0;
cost = costt[x[k]][x[1]];
for (int i = 1 ; i < k ; ++i)
{
int nod1 = x[i];
int nod2 = x[i + 1];
if (!muchie[nod1][nod2])
return 0;
cost += costt[nod1][nod2];
}
return 1;
}
void back (int k)
{
for (int i = 0 ; i < N ; ++i)
{
x[k] = i;
if (k == N)
{
if (ok (k) && valid (k))
if (cost < minim)
minim = cost;
}
else back (k + 1);
}
}
int main ()
{
freopen ("hamilton.in" , "r" , stdin);
freopen ("hamilton.out" , "w" , stdout);
scanf ("%d %d" , &N , &M);
int a , b , c;
for (int i = 1 ; i <= M ; ++i)
{
scanf ("%d %d %d" , &a , &b , &c);
costt[a][b] = c;
muchie[a][b] = true;
}
minim = INF;
back (1);
if (minim != INF)
printf ("%d" , minim);
else printf ("Nu exista solutie");
return 0;
}