Pagini recente » Cod sursa (job #2871816) | Cod sursa (job #1786457) | Borderou de evaluare (job #1472783) | Cod sursa (job #688878) | Cod sursa (job #3238599)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
const int inf=1e9+7;
int a[21][21], dp[300001][21];
int main()
{
int n, m, x, i, j, k, rez=inf;
f>> n >> m;
for(i=0; i<=18; i++){
for(j=0; j<=18; j++){
a[i][j]=inf;
}
}
for(k=1; k<=m; k++){
f>> i >> j >> x;
a[i][j]=x;
}
for(i=1; i<pow(2, n); i++){
for(j=0; j<n; j++){
dp[i][j]=inf;
}
}
dp[1][0]=0;
for(i=1; i<pow(2, n); i++){
for(j=0; j<n; j++){
if((i>>j)%2==0){
continue;
}
for(k=0; k<n; k++){
if((i>>k)%2==1){
continue;
}
dp[i | (1<<k)][k]=min(dp[i | (1<<k)][k], dp[i][j]+a[j][k]);
}
}
}
x=pow(2, n);
for(i=0; i<n; i++){
rez=min(rez, dp[x-1][i]+a[i][0]);
}
if(rez==inf){
g<< "Nu exista solutie";
} else {
g<< rez;
}
return 0;
}