您的位置:首页 > 其它

TSP

2015-08-04 11:07 274 查看
#include <iostream>
#include <limits.h>
#include <string.h>;
using namespace std;
#define MAX_N 5
#define INF 9999
int n=5;
int d[MAX_N][MAX_N]={
{INF,3,INF,4,INF},
{INF,INF,5,INF,INF},
{4,INF,INF,5,INF},
{INF,INF,INF,INF,3},
{7,6,INF,INF,INF}
};
int rec(int,int);
int dp[1<<MAX_N][MAX_N];
int main() {
memset(dp,-1,sizeof(dp));
int ans=rec(0,0);
cout<<ans<<endl;

}

int rec(int s,int v){
if(dp[s][v]>=0){
return dp[s][v];
}

if(s==(1<<n)-1&&v==0){
return dp[s][v]=0;
}

int res=INF;
for(int i=0;i<n;i++){
if(!(s>>i & 1)){
res=min(res,rec(s|1<<i,i)+d[v][i]);
//cout<<i<<endl;
}
}
return dp[s][v]=res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: