PHP, 385 335 307 289 bytes
function c(&$m,$x,$r=-1,$l=0,$d=0){if($r<0)$r=array_search(P,$m);$m[$l=$r]=V;if(!in_array(T,$m))die;foreach([L=>$r%$x?$r-1:0,U=>$m[$r-$x]?$r-$x:0,D=>$m[$r+$x]?$r+$x:0,R=>$r%$x<$x-1?$r+1:0]as$o=>$n)if($n&&$m[$n]!=M&&$m[$n]!=V){echo$o;c($m,$x,$n,$r,$o);}if($l)echo[L=>R,R=>L,U=>D,D=>U][$d];}
Uses a recursive depth-first search to crawl the map until all treasures are found.
Input is a one-dimensional array map, and number of columns s( $m, 13 );
, output list to STDOUT
.
Ungolfed
This could stand a bit more golfing (and possibly a bit more cleverness).
function c( &$m, $x, $r=-1, $l=0, $d=0 ) {
// locate starting position on first move
if( $r < 0 )
$r = array_search( 'P', $m );
// move to new sqaure
$l = $r;
// mark square with . to show it has been visited
$m[ $r ] = '.';
// end if no more treasures
if ( ! in_array( 'T', $m ) )
exit;
// generate list of adjacent squares (this needs work)
// ex: room 0 (top left) => [ 'L' => false, 'U' => false, 'D' => 13, 'R' => 1 ]
$dirs = [
'L' => $r % $x ? $r-1 : false,
'U' => $m[ $r - $x ] ? $r - $x : false,
'D' => $m[ $r + $x ] ? $r + $x : false,
'R' => $r % $x < $x-1 ? $r+1 : false
];
// consider valid directions for next move
foreach ( $dirs as $o => $n )
if ( $n && $m[$n] != 'M' && $m[$n] != '.' ) {
// if not a Mountain and not Visited display the direction
echo $o;
// and recursively keep crawling
c( $m, $x, $n, $r, $o );
}
// if this is a dead end, go back to previous square
if ( $l )
echo ['L'=>'R','R'=>'L','U'=>'D','D'=>'U'][$d]; // display the reverse direction
}
DDDDDRUUUUURDDRUURDDRUURDDDLDLLLDRRRRURUUUURDDDDDLRRU
DDRUURDD
(no output)
DDDDDRUUUUURDDDDDRUUUUURDDDDDRUUUUURDDDDDRUUUUURRRRRLLLLLDDRRRRRLLLLLDDRRRRR
(no output)
(no output)
Hedge Maze (an original creation)
+-+-+-+-+-+-+-+-+-+-+-+-+-+
|P|M| |T|M| | | |M| |M|M|T|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |M| |M| | |M|T|M|T| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T| | |M| |M| |T|M|M|M| |M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|M| | | |M| |M|M| | | |M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T| | |M| |M| | | | |M| |M|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
|M|M| |T| | |M|M|M|M|M| |T|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
DDRRUURLDDDDLLRRDRRUULRUURURRDDLDDRRRURRUULLUDRRRUDLDDDDR