Pagini recente » Cod sursa (job #3327791) | Cod sursa (job #1690069) | Cod sursa (job #1420980) | Cod sursa (job #2475602) | Cod sursa (job #3326131)
#include <fstream>
using namespace std;
const int maxn=19;
const int maxl=(1<<18)+20;
int dp[maxl][maxn];
int cost[20][20];
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
void solve() {
int n,m;
cin>>n>>m;
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++) {
cost[i][j]=1e8;
cost[j][i]=1e8;
}
}
for (int i=0;i<m;i++) {
int l,r,c;
cin>>l>>r>>c;
cost[l][r]=c;
//cost[r][l]=c;
}
for (int i=0;i<(1<<n);i++) {
for (int j=0;j<n;j++) {
dp[i][j]=1e8;
}
}
dp[1][0]=0;
for (int i=1;i<(1<<n);i++) {
for (int j=0;j<n;j++) {
if (i&(1<<j)) {
for (int k=0;k<n;k++) {
if (!(i&(1<<k))) {
dp[(i|(1<<k))][k]=min(dp[(i|(1<<k))][k],dp[i][j]+cost[j][k]);
}
}
}
}
}
int mini=5e8;
for (int i=0;i<n;i++) {
mini=min(mini,dp[(1<<n)-1][i]+cost[i][0]);
}
if (mini>=1e8) {
cout<<"Nu exista solutie";
}
cout<<mini;
}
signed main() {
int t;
t=1;
while (t--)solve();
return 0;
}