Labirinto em Java

Olá, preciso criar um método recursivo chamado labirinto, que recebe um array de caracteres e retorna verdadeiro caso exista pelo menos um caminho para chegar ao destino e falso caso não exista. O ponto inicial sempre será a posição [0][0] do array.

o meu array segue o seguinte modelo:

  XXXXX
X X   X
X X X X
X   X D

onde os espaços em brancos são os caminhos livres, os x as paredes e o D o destino final;

aqui é o que eu tenho até o momento, alguém consegue me ajudar a resolver?

boolean existeCaminho = labirinto(array, 0, 0);

private boolean labirinto (char [][] array, int linha, int coluna) {
    if (linha >= array.length || linha < 0) {
      return false;
    }

    if (coluna >= array[linha].length || coluna < 0) {
      return false;
    }

    if (array[linha][coluna] == 'X') {
      return false;
    }

    if (array[linha][coluna] == 'D') {
      return true;
    }

    if (array[linha][coluna] == ' ' && (labirinto(array, linha + 1, coluna) || labirinto(array, linha, coluna + 1))) {
      return true;
    }
    
    return false;
  }

Olá,

A “estrada até o final” será obrigatoriamente de cima para baixo?