我有一项任务,我们正在处理旅行商问题。 我不会撒谎,我现在正在做的那部分我实际上并不完全明白他们在问,所以很抱歉,如果我奇怪地说出这个问题。 我有点得到它,但不完全。
我们正在计算推销员的近似距离。我们需要创建一个二维数组,我相信比特集?无论如何都要以二进制形式存储值。 0代表城市未被访问过,1代表访问过的城市。
我们已经获得了一个非常有用的算法,如果这里有人可以帮助我完成第一步,我应该能够完成它:
Create memoisation table [N][(1 << N)]
(其中N =城市数量)。 我得到1&lt;&lt; N表示将城市数量(例如5)转换为二进制,然后将该集合向左移动一个位置。
我的主要问题是:
我可能在这里错了,事实上这很可能......任何帮助都表示赞赏,谢谢!
答案 0 :(得分:0)
以下是一般规则“&lt;&lt;”运算符表示左移和“&gt;&gt;”意味着右移。将任意数字右移1等于除以2,左移任何数字乘以2相当于乘以2.例如,假设数字7(二进制数111)。所以7&lt;&lt; 1将变为1110,即7 * 2 = 14且7>&gt; 1将变为11,即7/2 = 3。
因此,算法将数字N转换为bitset数组,因为二进制是
将组合左移动到1,如果你的意思是leftshift加1,你可以用N&lt;&lt; 1
进行这是在C ++中创建二维数组的方法
[变量类型] TwoDimensionalArray [size] [size];
对于这个问题,虽然我相信您可能想要了解C ++ bitset,但您可以使用bitset轻松实现它。为此,您只需要弄清楚要使用的位集的大小。例如,如果N的最高值为15,那么您需要一个4的位集大小。因为4位,您可以表示的最大数字是15(二进制1111)。希望这可以帮助。