我試圖在Gprolog中實現Warnsdorff的規則來在任意棋盤上生成遊覽。我發現了一個SO帖子,在B-prolog中提供了一個很好的解決方案,我只需要翻譯Warnsdorff步驟(knight's tour efficient solution)。使用Warnsdorff規則的Gprolog騎士之旅
下面是我實現Warnsdorff步驟:從位置
warnsdorffSelect(X, Y, Row, Col, Past, NewX_, NewY_) :-
setof((Count, NewX, NewY), (
possibleMovesFromPosWithBoard(X, Y, Row, Col, Past, NewX, NewY),
countMoves(NewX, NewY, Row, Col, [(NewX, NewY) | Past], Count).
), [(_, NewX_, NewY_)|_]).
possibleMovesFromPosWithBoard/7返回所有的法律動作和countMoves/6返回的從位置移動數。
我的問題發生在函數未能選擇導致從新位置移動的最小數目的移動,而是選擇返回結果列表中的第一個移動(也就是說,它沒有出現被分類)。最後,該計劃總是會導致「否」,因爲它將自己背上了一個角落。
在此先感謝!
我們有這個[片刻](http://stackoverflow.com/questions/43600928/translating-a-tabled-predicate-from-b -prolog-to-gprolog?s = 3 | 0.0000)前。 – false