我不确定这是最好的还是属于数学的,但我想我也可以在这里得到一些关于代码的指针。对于作业,我需要使用 Prolog解决凸七巧板谜题。
所有的谜题和可用的部分都被定义为顶点列表。例如:
puzzle(1,[(0,0),(4,0),(4,4),(0,4)])
代表一个方形拼图,piece(1,[(0,0),(4,0),(2,2)])
可能是大三角形之一。
我已经用一个 id 和一个点列表定义了所有 7 个片段,我认为我应该能够编写适当的代码来遍历这些片段并对它们执行一些操作。但是,我在几何方面并不是那么有见地,所以我不知道如何仅根据其顶点来确定哪一块适合拼图的哪个位置。
本课程中的大部分作业都是基于经典的组合问题,例如旅行推销员。是否有任何涉及凸形(或任何类型的形状)的问题可能会激发我提出解决方案?我很难找到以这种方式处理形状的声明性代码的在线示例。如果我知道要寻找什么,那将非常有帮助。
我想我可以通过检查拼图的外边界是否被覆盖一次而内部边界(由于放置碎片)是否被覆盖两次来验证解决方案是否正确。我可能会将此事实用作解决方案某些部分的基本案例。除此之外,我目前能想到的最好的办法就是将每一块拼图的边界强制放入一些未占用的空间,直到它们适合为止。