站外题求助(旅行商问题)
  • 板块灌水区
  • 楼主西江月_醉
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/10/25 16:17
  • 上次更新2023/11/5 09:54:40
查看原帖
站外题求助(旅行商问题)
198212
西江月_醉楼主2020/10/25 16:17
#include<bits/stdc++.h>
using namespace std;
int n,e[16][16],dp[1<<16][16];
int ans=0x7f7f7f;
int main() {
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			int a;
			cin>>a;
			if(a) e[i][j]=a;
		}
	}
	for(int i=0;i<=(1<<(n+1))-1;i++){
		for(int j=0;j<n;j++) dp[i][j]=0x7f7f7f;
	}
	for(int i=0;i<n;i++) dp[0][i]=dp[1<<i][i]=0;
	for(int i=2;i<=(1<<(n+1))-1;i++){
		for(int j=0;j<n;j++){
			if((1<<j)&i==0) continue;
			for(int k=0;k<n;k++){
				if(j==k||(1<<k)&i==0) continue;
				if(e[k][j]) dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+e[k][j]);
			}
		}
	}
	for(int i=1;i<n;i++){
		if(e[i][0]) ans=min(ans,dp[(1<<(n+1))-1][i]+e[i][0]);
	}
	if(ans==0x7f7f7f) cout<<-1;
	else cout<<ans;
	return 0;
}
2020/10/25 16:17
加载中...