Y #6260(2008/05/04 15:08 GMT) [ Mathematica ] Rating1/3=0.33
再帰のない言語やあっても深さの制限が厳しい言語があるので、 手法は限定しないほうがいいのではないでしょうか (構造体とかリストとかも)。 要は迷路が解ければいいわけで。 例えばグラフアルゴリズムを標準サポートしている処理系なら、 最短経路も特に難しいということはないかと (愚直なエージェントを実装したいということがあるかもしれませんが) 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]
Rating1/3=0.33-0+
[ reply ]
Y
#6260()
[
Mathematica
]
Rating1/3=0.33
再帰のない言語やあっても深さの制限が厳しい言語があるので、 手法は限定しないほうがいいのではないでしょうか (構造体とかリストとかも)。 要は迷路が解ければいいわけで。 例えばグラフアルゴリズムを標準サポートしている処理系なら、 最短経路も特に難しいということはないかと (愚直なエージェントを実装したいということがあるかもしれませんが) num:座標を数字に変換する補助関数 pos:数字を座標に変換する補助関数 実行結果(Mathematicaなのでインデックスがずれます): {{2,2},{2,3},{2,4},{2,5},{3,5},{4,5},{4,4},{4,3},{5,3},{5,2}}<<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]Rating1/3=0.33-0+
[ reply ]