01背包记录路径

 用二维数组来记录,path[ m ] [ n ] 。其中m表示物品(m<=物品数),n表示背包状态(n<=背包容量)。

比如 path [ i ] [ j ] 表示物品 i 放在了状态 j 的背包中。 前提条件:path数组全部为0,

代码实现记录路径:

		for(int i=0;i<n;i++)
			for(int j=V;j>=v[i];j--)
				if(f[j]<f[j-v[i]]+w[i])
				{
					f[j]=f[j-v[i]]+w[i];
					path[i][j]=1; //把装进去的物品标记一下
				}

路径读取代码:

		int i=n-1,j=V; //V:背包容量。n个物品 
		while(i>=0&&j>=0)
		{
			if(path[i][j])//物品i在j里 
			{
				printf("%d ",i);//把物品i的编号输出 
				j-=v[i];  //读完了物品i,找下一个背包状态 
			}
			i--; 
		}

猜你喜欢

转载自blog.csdn.net/Destinymiao/article/details/81475373
今日推荐