[topic] 再帰を用いた迷路探索問題
Posted feedbacks - Mathematica
再帰のない言語やあっても深さの制限が厳しい言語があるので、
手法は限定しないほうがいいのではないでしょうか
(構造体とかリストとかも)。
要は迷路が解ければいいわけで。
例えばグラフアルゴリズムを標準サポートしている処理系なら、
最短経路も特に難しいということはないかと
(愚直なエージェントを実装したいということがあるかもしれませんが)
num:座標を数字に変換する補助関数
pos:数字を座標に変換する補助関数
実行結果(Mathematicaなのでインデックスがずれます):
{{2,2},{2,3},{2,4},{2,5},{3,5},{4,5},{4,4},{4,3},{5,3},{5,2}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <<DiscreteMath`GraphPlot`;
<<DiscreteMath`Combinatorica`;
tmp={
"******",
"*8000*",
"****0*",
"**000*",
"*90*0*",
"******"};
maze=Characters/@tmp;
n=Length@First@maze;
num[i_,j_]:=n (i-1)+j
pos[x_]:={Quotient[x,n,1]+1,Mod[x,n,1]}
start=num@@First@Position[maze,"8"];
goal=num@@First@Position[maze,"9"];
arcs={};
Do[
If[maze[[i,j]]!="*",
If[maze[[i,j+1]]!="*",
AppendTo[arcs,{num[i,j],num[i,j+1]}]];
If[maze[[i+1,j]]!="*",
AppendTo[arcs,{num[i,j],num[i+1,j]}]]],
{i,1,Length@maze-1},{j,1,n-1}];
sol=ShortestPath[FromUnorderedPairs@arcs,start,goal];
If[Head@sol===ShortestPath || Length@sol==1,False,
pos/@sol]
|


buttmeister #6255() [ C ] Rating-11/13=-0.85
Rating-11/13=-0.85-0+
[ reply ]