Maze solving: Difference between revisions

Content added Content deleted
(Emacs Lisp: Avoid non-portable shebang)
Line 1,438: Line 1,438:
<lang>size = 20
<lang>size = 20
n = 2 * size + 1
n = 2 * size + 1
endpos = n * n - n - 3
endpos = n * n - 2
startpos = 2 * n + 2
startpos = n + 1
f = 100 / n
f = 100 / n
#
#
Line 1,458: Line 1,458:
len m[] n * n
len m[] n * n
#
#
set_background 000
func show_maze . .
func show_maze . .
clear_screen
set_color 000
draw_rect 100 100
for i range len m[]
for i range len m[]
if m[i] = 0
if m[i] = 0
Line 1,467: Line 1,467:
.
.
call draw_square startpos 900
call draw_square startpos 900
sleep 0.001
.
.
offs[] = [ 1 n -1 (-n) ]
offs[] = [ 1 n -1 (-n) ]
func visited pos . r .
func getposn pos dir . posn .
r = 0
posn = -1
for i range 4
r = pos div n
r += m[pos + 2 * offs[i]]
c = pos mod n
if dir = 0 and c <> n - 2 or dir = 1 and r <> n - 2 or dir = 2 and c <> 1 or dir = 3 and r <> 1
posn = pos + 2 * offs[dir]
.
.
func visited pos . res .
res = 0
for dir range 4
call getposn pos dir posn
if posn <> -1
res += m[posn]
.
.
.
.
.
func m_maze pos . .
func m_maze pos . .
m[pos] = 0
m[pos] = 0
call show_maze
repeat
repeat
call visited pos res
call visited pos res
until res = 0
until res = 0
dir = random 4
dir = random 4
posn = pos + 2 * offs[dir]
call getposn pos dir posn
if m[posn] <> 0
if posn <> -1 and m[posn] <> 0
m[pos + offs[dir]] = 0
m[(pos + posn) div 2] = 0
call m_maze posn
call m_maze posn
.
.
Line 1,491: Line 1,504:
for i range len m[]
for i range len m[]
m[i] = 1
m[i] = 1
.
for i range n
m[i] = 0
m[n * i] = 0
m[n * i + n - 1] = 0
m[n * (n - 1) + i] = 0
.
.
call m_maze startpos
call m_maze startpos
Line 1,522: Line 1,529:
call make_maze
call make_maze
call show_maze
call show_maze
sleep 1
sleep 5
call solve -1 startpos found</lang>
call solve -1 startpos found</lang>