Python での単純な幅優先検索ソリューションを次に示します。
# the target square and the positions of the snakes and ladders:
top = 100
jump = { 1: 38, 4: 14, 9: 31, 16: 6, 21: 42, 28: 84, 36: 44,
48: 26, 49: 11, 51: 67, 56: 53, 62: 19, 64: 60, 71: 91,
80:100, 87: 24, 93: 73, 95: 75, 98: 78}
# start from square 0 (= outside the board) after 0 rolls
open = {0}
path = {0: ()}
while len(open) > 0:
i = open.pop()
p = path[i] + (i,)
for j in xrange(i+1, i+7):
if j > top: break
if j in jump: j = jump[j]
if j not in path or len(path[j]) > len(p):
open.add(j)
path[j] = p
for i in path:
print "Square", i, "can be reached in", len(path[i]), "rolls via", path[i]
ボード レイアウト (つまり、jump
辞書) は、Bas Swinckels の回答でリンクされているブログ投稿から取得されます。このコードは、ボード上の到達可能な各正方形への最短経路 (の 1 つ) を出力し、次のように終了します。
Square 100 can be reached in 7 rolls via (0, 38, 41, 45, 67, 68, 74)
完全な出力が必要な場合は、ideone.com でこのデモを参照してください。