Java labirinto

Boa noite, tenho que fazer um trabalho da faculdade sobre labirinto e não consigo evoluir no mesmo, até o momento meu código está dessa maneira:

package labirinto;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class Teste
{
static char cel[][];

public static void main(String args[]) 
{

	int QntLinhas = 0;
	int QntColunas = 0;
	
	try {
		FileReader f = new FileReader("labirinto.txt");
		BufferedReader in = new BufferedReader(f);
		String linha;
		while ((linha = in.readLine()) != null) {
			QntLinhas++;
			QntColunas = linha.length();
		}
		in.close();
	} 
	catch (IOException e) {
	
	}

	System.out.println(QntLinhas);
	System.out.println(QntColunas);

	cel = new char[QntLinhas][QntColunas];

	try {
		FileReader f = new FileReader("labirinto.txt");
		BufferedReader in = new BufferedReader(f);
		String linha;
		int i = 0;
		while ((linha = in.readLine()) != null) {
			for (int j = 0; j < QntColunas; j++) {
				cel[i][j] = linha.charAt(j);
			}
			i++;
		}
		in.close();
	} catch (IOException e) {
	}

	mostra(cel);
	achaSaida(12, 12);
	mostra(cel);

}

private static void mostra(char z[][]) 
{
	for (int linha = 0; linha < z.length; linha++) {
		System.out.println();
		for (int coluna = 0; coluna < z[linha].length; coluna++) {
			System.out.print(z[linha][coluna]);
		}
	}
	System.out.println();
}

private static void achaSaida(int x, int y) 
{
	if (cel[x][y] == 'D'){
		System.out.println("Achei a saida em linha " + x + " coluna: " + y );	
	}
	else{
		if (cel[x][y] == ' ' || cel[x][y] == 'D') {
			cel[x][y] = '+';
		}
		if (cel[x-1][y] == ' ' || cel[x-1][y] == 'D') {
			achaSaida(x-1, y);
		}
		if (cel[x][y+1] == 'X' || cel[x][y+1] == 'D') {
			achaSaida(x, y+1);
		}
		if (cel[x][y-1] == 'X' || cel[x][y-1] == 'D') {
			achaSaida(x, y-1);
		}	
	}		
}

}

Porém o trabalho pede:

O labirinto será um array bidimensional de caracteres. No labirinto, posições com ‘X’ indicam que não é possível passar, enquanto posições com ’ ’ (espaço) indicam que é possível a passagem. O local de destino está marcado no labirinto com a letra ‘D’.

O ponto inicial sempre será a posição [0][0] do array .

Os métodos seguintes eu não estou conseguindo implementar no código:

1.Criar um método chamado " carregaLabirinto ", que recebe por parâmetro uma String fileName e retorna um array bidimensional de caracteres. Este método abre o arquivo indicado por fileName e retorna um array de caracteres, representado no arquivo.

  1. Criar um método recursivo (com métodos público e privado) 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. No método público, para criar o array , você deve chamar o método carregaLabirinto , criado na parte 1.

Se poderem me ajudar, agradeço.

Poderia postar aqui como é esse arquivo?

2 curtidas
public static char[][] carregarLabirinto(String fileName) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(fileName));
    List<char[]> lines = new ArrayList<char[]>();
    String line = null;
    while ((line = reader.readLine()) != null) {
        lines.add(line.toCharArray());
    }
    reader.close();
    char[][] matriz = new char[lines.size()][];
    return lines.toArray(matriz);
}
1 curtida

Oii, claro

8
20
XXXXXXXXX XXXXXX
X XXXXXXXXX X XXXX
X XXXXXXX XXX XXXX
XXX XXXXXX XXX XXXX
XXX XX XXXX
XXX XX X XXXXX XXX
XXXXXX X XXXXXX X
XXXXXX XXXXXX XXXD

Este ficheiro claramente tem o espaçamento errado no início/fim para indicar um labirinto. Todas as linhas deveriam ter 20 caracteres.

Coloca ``` antes e do teu labiriinto para ficar corretamente formatado aqui no forum, como por exemplo assim

8
20
  XXX       XXXXXXXX
X   X XXXXX XXXXXXXX
XXX X XXXXX XXXXXXXX
XXX X    XX    XXXXX
XXX XXXX XXXXX XX 
XXX      XXXXX  X X
XXXXXXXXXXXXXXX X X
XXXXXXXXXXXXXXX   XD
1 curtida

Muito obrigada Staroski

Obrigada!!!