【问题标题】:C++ two dimensional array of bitsetsC++ 二维位集数组
【发布时间】:2013-06-03 03:34:42
【问题描述】:

我有一个任务是解决旅行推销员问题。 我不会撒谎,我现在正在做的部分实际上我并不完全理解他们在问,如果我奇怪地表达这个问题,很抱歉。 我有点明白,但不完全。

我们正在计算推销员的大致距离。我们需要创建一个二维数组,我相信比特集?无论如何以二进制形式存储值。 0代表未访问过,1代表已访问过。

我们得到了一个非常有用的算法,如果这里有人可以帮助第一步,我应该能够完成它:

Create memoisation table [N][(1 << N)]

(其中 N = 城市数)。 我知道 1

我的主要问题是:

  1. 将 N 转换为二进制(我认为这是我需要做的?)
  2. 将集合向左移动一位
  3. 实际上是创建这些大小的二维数组...

我在这里可能是错的,事实上这很可能......任何帮助表示赞赏,谢谢!

【问题讨论】:

  • 1&lt;&lt;N 与 2 的 N 次方相同。例如1&lt;&lt;5 是 32。

标签: c++ multidimensional-array memoization bitset bitmask


【解决方案1】:

这是一般规则“>”表示右移。将任何数字右移 1 相当于除以 2,将任何数字左移 2 相当于乘以 2。例如,假设一个数字 7(二进制 111)。因此 7 > 1 将变为 11 即 7 / 2 = 3 。

所以算法将数字 N 转换为 bitset 数组作为二进制是

  1. N mod 2(如果将 N 除以 2,则取余数)
  2. 将余数存储在集合中(即 List、Array、Stack)
  3. 将 N 除以 2
  4. 如果 N/2 >1 从第 1 步开始重复 N/2
  5. 否则,反转数组,你就有了你的 bitset。

将集合向左移动到一个,如果你的意思是左移一个,你可以做到 N

这就是在 C++ 中创建二维数组的方式

[变量类型] TwoDimensionalArray[size][size];

对于这个问题,尽管我相信您可能想阅读有关 C++ bitset 的信息,并且您可以使用 bitset 轻松实现它。为此,您只需弄清楚要使用的位集的大小。例如,如果 N 的最大值是 15,那么您需要一个 4 的位集大小。因为使用 4 位,您可以表示的最大数字是 15(二进制 1111)。希望这可以帮助。

【讨论】:

  • 谢谢 - 我向一位朋友询问了 Bitset,因为我听说它更好,但显然我们不允许使用它。我也意识到你可以在 C++ 中编写 (1
  • 希望你能看到这个——我有一个附带问题。我正在尝试在头文件中声明我的数组,以便可以在多个函数中使用它,但是我必须设置一个我猜的大小? int table[][] 不起作用,因为至少显然我必须为第二维度设置大小。我不确定?!
  • 是的,您必须先设置尺寸。对于 2 x 2 数组,您必须将其设置为 int table[2][2]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多