【问题标题】:Tower of Hanoi without moving directly from dist to temp河内塔没有直接从 dist 移动到 temp
【发布时间】:2015-09-28 00:49:35
【问题描述】:

考虑原始河内塔问题的一个额外条件:

  • 如果您有 3 极 A、B 和 C,则不允许将圆盘直接从 A 移动到 B 或从 B 移动到 A

这意味着从著名的递归解决方案中,我们不允许将 start 移动到 temp 或 temp to start。

void hanoi(int n, char start, char temp, char finish){
    if (n== 1)
        cout << start << " -> " << finish;
    else {
        hanoi(n - 1, start, finish, temp);
        cout << start << " -> " << finish;
        hanoi(n - 1, temp, start, finish);
    }
}

谁能帮我找到解决办法?

【问题讨论】:

  • 是什么让您认为有解决方案?
  • 你的意思是没有?
  • 我不知道;你似乎认为有,所以我想知道这是什么基础。
  • 当然有解决方案。我相信你可以通过谷歌搜索找到它。

标签: algorithm towers-of-hanoi


【解决方案1】:

不要直接从 A 移动到 B,只需执行中间移动 A->C->B。如果实现是正确的,应该总是可以做到的。

【讨论】:

  • 第一步总是 a -> c,第二步是 a -> b 所以我们得到 a -> c , a -> c , a -> b
  • 第二步可以做c->b, a->c, b->c
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多