Hop-over Puzzle(2)
一つとばしだけでなく、二つとばしもできるときの
必要な手数で最小なものを求めてみた。
必要な手数で最小なものを求めてみた。
(0..10).each{|n|
n2 = 2 * n
ary = [0] * n + [2] + [1] * n
# 最終の並び
ary0 = [1] * n + [2] + [0] * n
s = 0
f_ary = [ary]
while !f_ary.include?(ary0)
b_ary = []
f_ary.each{|a|
# カエルのいない場所
i = a.index(2)
[-3, -2, -1].each{|j|
b = a.clone
k = i + j
if k >= 0 && b[k] == 0
# カエルのいない場所に0のカエルがとんでくる
b[i], b[k] = b[k], b[i]
b_ary << b
end
}
[1, 2, 3].each{|j|
b = a.clone
k = i + j
if k <= n2 && b[k] == 1
# カエルのいない場所に1のカエルがとんでくる
b[i], b[k] = b[k], b[i]
b_ary << b
end
}
}
f_ary = b_ary.uniq
s += 1
end
p s
}
出力結果
0
3
5
10
16
24
33
44
55
68
83
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。