Algorithm 在一块板上生成一组工件的所有可能排列

Algorithm 在一块板上生成一组工件的所有可能排列,algorithm,Algorithm,我想知道,在战舰游戏中,在以下约束条件下,什么是生成所有可能的布局组合的最佳方法: -电路板有R行和C列 -船上应放置一套L型船 -每艘船都有大小(船上使用的槽数) -船可以水平或垂直放置在船上 -2艘船不能重叠 例如,考虑到一个10x10板和一组5艘船: L1:5个插槽 L2:3个插槽 L3:3个插槽 L4:3个插槽 L5:2个插槽 如何生成一组所有可能的董事会安排 感谢您的输入。考虑到您希望列举安排而不是计算安排,并且安排的数量与棋盘的大小成指数关系,并且在传统游戏中船只的数量很小,你不

我想知道,在战舰游戏中,在以下约束条件下,什么是生成所有可能的布局组合的最佳方法: -电路板有R行和C列 -船上应放置一套L型船 -每艘船都有大小(船上使用的槽数) -船可以水平或垂直放置在船上 -2艘船不能重叠

例如,考虑到一个10x10板和一组5艘船:

  • L1:5个插槽
  • L2:3个插槽
  • L3:3个插槽
  • L4:3个插槽
  • L5:2个插槽
如何生成一组所有可能的董事会安排


感谢您的输入。

考虑到您希望列举安排而不是计算安排,并且安排的数量与棋盘的大小成指数关系,并且在传统游戏中船只的数量很小,你不能做得比粗暴地强迫它通过尝试将每艘飞船放置在它适合的每一个可能的位置和回溯更好

如果你有很多船,比如说你的船快满了,或者你只对计算安排的数量感兴趣,那么你可以尝试使用a来获得指数级的提升(尽管运行时间可能仍然是指数级的)

<>强>编辑:>有效地处理相同大小的船舶,必须考虑它们的多样性。即,首先将船舶分组为向量
u[I]
“我们有多少艘形式为
I
的船舶”:

  • 如果您在单元格上循环,那么您将维护一个向量
    v[i]
    “已经放置了多少船形式的
    i
    ”。对于每个单元格,您尝试放置形式为
    i
    iff
    v[i]
    ,如果适合,则递增
    v[i]
    ,并递归到下一个单元格

  • 如果在某个单元格中放置了形式为
    i
    的ship之后循环ship,那么您将递归地将相同形式的其余ship仅放置在已经放置的单元格“之后”的单元格中。当所有表格
    i
    已放置在板上时,您将从单元格0移动到放置下一张表格


战列舰能彼此相邻吗?@TomerW是的,他们渴望得到答案。事实上,我希望列举所有可能的结果。让我困惑的是“如何”以一种聪明的方式做暴力的事情,并避免探索“重复”,因为你可以有几个相同的飞船