小中大 ┃ 中 小□大 ┃ ┃ 小中大
小中大 中小大 ┃ ┃ 中 中 小□大 □小大 ┗━━┳━━┛ 小 中 □□大
S S ┏━┻━┓ ┏━┻━┓ ┃ ┃ ┃ ┃ A━━━B A B ┃ ┃ ┏┻┓ ┏┻┓ C G C B A G ┃ ┃ G C
2分木 |
1 ┏━━━━━┻━━━━━┓ 2 3 ┏━━┻━━┓ ┏━━┻━━┓ 4 5 6 7 ┏━┻━┓ ┏━┻━┓ ┏━┻━┓ ┏━┻━┓ 8 9 10 11 12 13 14 15
1 ┏━━━━━┻━━━━━┓ 2 9 ┏━━┻━━┓ ┏━━┻━━┓ 3 6 10 13 ┏━┻━┓ ┏━┻━┓ ┏━┻━┓ ┏━┻━┓ 4 5 7 8 11 12 14 15
S:=初期状態;
if S が解 then success;
else L:=[S];
fi;
do while L≠[];
H:=car(L);
if H から枝が生成できる
then
do until {H から新たな枝が生成できない}
S:=枝;
if S が解 then success;
else L:=set_tail(L,S);
fi;
od;
fi;
L:=cdr(L);
od;
failure;
小
中
[[[大],[],[]]]
中 中
[[[大],[小],[]],[[大],[],[小]]]
小
中 中
[[[大],[小],[中]],[大],[],[]],[大],[],[小]],
小
中 中
[[大],[中],[小]],[[大],[小],[]],[[大],[],[]]]
T:=[初期状態S]; do while T≠[]; H:=car(T); if H が解 then sucess; fi; if H から新たな枝が生成できる then do S:=枝; if S が解 then success else T:=append(S,T); fi; od; fi; od; failure; 小 中 [[[大],[],[]]] 小 中 中 [[[大],[小],[]],[[大],[],[]]] 小 中 中 [[[大],[小],[中]],[[大],[小],[]],[[大],[],[]]]
初期状態 目標 ┃ ┃ ┃ ┃ ○○○┃ ┃ ┃ ┃ ○○○ ×××┃= ┃ ┃ =┃ ××× ┃ ┃ ┃ ┃
(3,3,1) ○○○×××=
┏━━━━╋━━━━┓
(3,2,0) ┃ ┃ ○○○×× ×=
(3,1,0) ┃ ○○○× ××=
┃ (2,2,0) ○○×× ○×=
┗━┳━━┛
(3,2,1) ○○○××= ×
┃
(3,0,0) ○○○ ×××=
┃
(3,1,1) ○○○×= ××
┃
(1,1,0) ○× ○○××=
┃
(2,2,1) ○○××= ○×
┃
(0,2,0) ×× ○○○×=
┃
(0,3,1) ×××= ○○○
┃
(0,1,0) × ○○○××=
┏━┻━━┓
(1,1,1) ┃ ○×= ○○××
┃ (0,2,1) ××= ○○○×
┗━┳━━┛
(0,0,0) ○○○×××=
(3,3,1)┳(3,2,0)
┣(3,1,0)┳(3,2,1)━(3,0,0)━(3,1,1)━(1,1,0)┓
┗(2,2,0)┛ ┃
┏━━━━━━━━━━━━━━━━━━━━━━━━┛
(2,2,1)━(0,2,0)━(0,3,1)━(0,1,0)┳(1,1,1)┓
┗(0,2,1)┻(0,0,0)
探索木と有向グラフ/有限オートマトン
状態空間探索(state-space search)
初期状態 目標状態 ┃ ┃ ┃ ┃ 夫1,妻1,夫2,妻2┃ボ ┃ ┃ ボ┃夫1,妻1,夫2,妻2 ┃ ┃ ┃ ┃ 可能な渡り方 夫1 夫2 夫1,妻1 夫2,妻2 夫1,夫2 嫉妬条件 夫1,妻2 夫2,妻1 解は2つ
┏━━○×○━━┓ ┏━━×○×━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ×○○━━╋━━××× ○××━━╋━━○○○ ┃ ┃ ┃ ┃ ┃ ┃ ┗━━○○×━━┛ ┗━━××○━━┛
【初期状態】 【目標状態】 ┏━┳━┳━┓ ┏━┳━┳━┓ ┃1┃2┃3┃ ┃1┃2┃3┃ ┣━╋━╋━┫ ┣━╋━╋━┫ ┃4┃5┃6┃ ┃4┃5┃6┃ ┣━╋━╋━┫ ┣━╋━╋━┫ ┃7┃8┃ ┃ ┃8┃7┃ ┃ ┗━┻━┻━┛ ┗━┻━┻━┛ ┏━┳━┳━┓ ┃x1┃x2┃x3┃ ┣━╋━╋━┫ ┃x4┃x5┃x6┃ ┣━╋━╋━┫ ┃x7┃x8┃x9┃ ┗━┻━┻━┛
|
|
|
|||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||
|
|
|
|
─────────────→ 必ず答えがあり 一意的であること |
|