The easiest way to do this is to use a reverse flood fill algorithm. Essentially, fill in the cheese square with distance 0. Fill in all adjecent squares with 1, ignoring squares that are already filled. Repeat with the squares you just filled in, and so on. Here's some code:
my @dist; &flood($cheese{x},$cheese{y},0); die "No route to cheese!" unless defined $dist[$mouse{x}][$mouse{y}]; sub flood { my ($x,$y,$dist) = @_; return if defined $dist[$x][$y] and $dist[$x][$y] < $dist; $dist[$x][$y] = $dist++; flood($x-1,$y,$dist) unless $map[$x-1][$y]; flood($x+1,$y,$dist) unless $map[$x+1][$y]; flood($x,$y-1,$dist) unless $map[$x][$y-1]; flood($x,$y+1,$dist) unless $map[$x][$y+1]; }
perl -e 'print "I love $^X$\"$]!$/"#$&V"+@( NO CARRIER'
In reply to Re: Mouse Heuristic
by Chmrr
in thread Mouse Heuristic
by pope
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |