我不確定這個最好的屬於這裏還是數學,但我想我可以在這裏得到一些關於代碼的指針。 對於一個作業,我需要使用Prolog解決凸Tangram puzzles。在Prolog中解決七巧板拼圖的好方法是什麼?
所有的謎題和可用的片段被定義爲頂點列表。例如: puzzle(1,[(0,0),(4,0),(4,4),(0,4)])
代表一個方形拼圖,而piece(1,[(0,0),(4,0),(2,2)])
可能是一個大三角形。
我已經定義了所有7個元素和一個點列表,我想我應該能夠編寫正確的代碼來遍歷這些元素並對它們執行一些操作。然而,當我談到幾何時,我並不那麼富有洞察力,所以我不知道如何才能確定哪個部分適合於基於其頂點的拼圖。
本課程中的大部分任務均基於經典的組合問題,如旅行推銷員。是否有任何涉及凸形(或任何形狀)的問題可能激發我想出一個解決方案?我很難找到以這種方式處理形狀的在線聲明性代碼示例。如果我知道要尋找什麼,這將非常有幫助。
我想我可以驗證解決方案是否正確,方法是檢查拼圖的外部邊界是否覆蓋一次,內部(由放置棋子產生的)覆蓋兩次。我可以將這個事實作爲我的解決方案的一部分的基本案例。除此之外,我現在能想到的最好的辦法就是蠻橫逼迫每一塊物品進入難題邊界之間的一個空閒空間,直到它們合適爲止。
實現蠻力解決方案,然後重構使用CLP(FD)謂詞通常是解決這類問題的好方法。 –
設計問題是爲了減少對離散(有限)搜索空間的可能位置。某些部分比其他部分具有更多對稱性,這可能有助於減小搜索空間的大小,但頂點位置和方向始終受限於一組連續的值。我喜歡沿着邊界放置人物的想法,這會導致小面積區域的一系列邊界。我曾想過其他形狀的「解剖」問題,其中一種離散化放置可能性的方式更爲明顯。 – hardmath