###質問内容
上図に示すようなスペースが確保されていて,各マスは11の正方形です.
ここに12の長方形の畳を4枚敷き詰める方法を全て見つけようとしています.
例えば,(a, b), (d, e), (g, h), (c, f)といった感じで置くなどです.
このとき,各変数の値に関する制約条件をすべて列挙する形で,この制約充足問題を定式化したいのですが,どのようにするのがよいのでしょうか.
個人的には,最初は各変数の値を0で埋めて置き,畳を置いたマスの変数は1にするのようなものを考えたのですが,解を網羅的に求めるプログラムを具体的に考え付くことができていない現状です.
CやJava,prologでやり方をご指導いただければ幸いです.
###制約条件の定式化の例
文字に異なる整数を入れて筆算を完成させる問題を例にすると,制約条件はうえのようになり,これはprologで次のように書くことで解くことが出来ました.
prolog
1:- use_module(library(clpfd)). 2send([[S,E,N,D], [M,O,R,E], [M,O,N,E,Y]]) :- 3Digits = [S,E,N,D,M,O,R,Y], 4Carries = [C1,C2,C3,C4], 5Digits ins 0..9, 6Carries ins 0..1, 7 8M #= C4, 9O + 10 * C4 #= M + S + C3, 10N + 10 * C3 #= O + E + C2, 11E + 10 * C2 #= R + N + C1, 12Y + 10 * C1 #= E + D, 13M #>= 1, S #>= 1, 14all_different(Digits), 15 16label(Digits).
###追記
何を教えていただきたいのか不明瞭の陽でしたので次の二つに目まとめさせていただきます.
・例の図における未知数と領域,制約の部分は畳敷き詰め問題だとどうなるのか
・畳の敷き詰め方を網羅するプログラムの方針(C, Java, prolog)
回答2件
あなたの回答
tips
プレビュー