classMazeWALL,VAC='#',' 'DIRS=[[+1,0],[-1,0],[0,+1],[0,-1]]definitialize(m,n)@rows=m@cols=n@field=Array.new(2*@rows+1){WALL*(2*@cols+1)}enddefgenconn=Array.new(@rows){Array.new(@cols,false)}cand=[[rand(@rows),rand(@cols),0,0]]# (0,0) is dummyuntilcand.empty?y,x,dy,dx=cand.slice!(rand(cand.size))nextifconn[y][x]conn[y][x]=true@field[2*y+1-dy][2*x+1-dx]=VAC@field[2*y+1][2*x+1]=VACDIRS.eachdo|mv|y_,x_=y+mv[0],x+mv[1]if(0...@rows)===y_&&(0...@cols)===x_&&!conn[y_][x_]cand<<[y_,x_,mv[0],mv[1]]endendendselfenddefpputs@fieldendendM,N=10,10maze=Maze.new(M,N)maze.gen.p
minke
#5324()
[
Ruby
]
Rating1/1=1.00
というわけで、通路の最小全域木を作るものを実装してみました。穴掘りです。
Pentium4/2.8GHzで1分半ほど。
Rating1/1=1.00-0+