Paths & Wasting Time
JavaScript (ES6), 171 bytes
Takes input in currying syntax (a)(n). Outputs by modifying the input matrix.

a=&gt;g=(n,y=a[F='findIndex'](r=&gt;~(i=r[F](v=&gt;v&gt;'?'))),x=i,R=a[y])=&gt;!n--|[-1,0,1,2].every(d=&gt;(R[x]='&lt;^&gt;v'[d+1],(c=(a[Y=y+~-d%2]||0)[X=x+d%2])&lt;1?g(n,Y,X):n|c!='$')&amp;&amp;(R[x]=' '))

Try it online!
Commented
a =&gt;                           // a[] = input matrix
g = (                          // g = recursive function taking:
  n,                           //   n = number of remaining moves
                               //   (x, y) = current coordinates, initialized as follows:
  y = a[F = 'findIndex'](r =&gt;  //     y = index of the row containing the starting point,
    ~(i = r[F](v =&gt; v &gt; '?'))  //         found by iterating over all rows r until we
  ),                           //         find some i such that r[i] &gt; '?'
  x = i,                       //     x = index of the column of the starting point
  R = a[y]                     //   R[] = current row
) =&gt;                           //
  !n-- |                       // decrement n; force failure if we're out of moves
  [-1, 0, 1, 2].every(d =&gt;     // for each direction d, where -1 = left, 0 = up,
    (                          // 1 = right and 2 = down:
      R[x] = '&lt;^&gt;v'[d + 1], (  //   update the current cell with the direction symbol
        c = (                  //   c = content of the new cell at (X, Y) with:
          a[Y = y + ~-d % 2]   //     Y = y + dy
          || 0                 //     (use a dummy value if this row does not exist)
        )[X = x + d % 2]       //     X = x + dx
      ) &lt; 1 ?                  //   if c is a space:
        g(n, Y, X)             //     we can go on with a recursive call
      :                        //   else:
        n | c != '$'           //     return false if n = 0 and we've reached the target
    ) &amp;&amp;                       //   unless the above result is falsy,
    (R[x] = ' ')               //   restore the current cell to a space
  )                            // end of every()