旅行商问题 状压dp

问题:给定一个n个顶点组成的带权有向图的距离矩阵d(I,j)(INF表示没有边)。要求从顶点0出发,经过每一个顶点恰好一次后再回到顶点0.问所经过的边的总权重的最小值是多少?

可以在O(2的n次方*n的平方)的时间内完成计算。对于不是整数的情况,很多时候很难确定一个合适的递推顺序,因此使用记忆化搜索可以避免这个问题。

用整数表示集合的位运算:

旅行商问题 状压dp_第1张图片

int n;
int d[maxn][maxn];//保存路径权值
int dp[1<=0){
    	return dp[S][v];
	}
	if(S==(1<>u&1)){//如果没有访问过 
			res=min(res,rec(S|1<

使用循环求解: 

int n;
int d[maxn][maxn];//保存路径权值
int dp[1<=0;S--){//从11..10开始遍历
		for(int v=0;v>u&1){//若未被访问
					dp[S][v]=min(dp[S][v],dp[S|1<

 

你可能感兴趣的:(旅行商问题 状压dp)