Labirinto em java

Estou a tentar criar um programa que dado uma matriz (labirinto) ele consigo percorrer a matriz e encontrar a saída sem passar pelos valores correspondentes às paredes do labirinto.
Até agora só consegui criar o labirinto e não faço ideia como fazer para que o programa encontre a saída. O código que tenho é este.

Código:
public class maze {
public static void main(String[] args) {

    int[][] matriz;
    matriz = new int[][]{{1,1,1,0,1,1,1,1,1,1},{1,1,1,0,0,0,0,1,1,1},{1,1,1,0,1,1,0,0,1,1},{1,1,1,0,0,0,1,0,0,1},{1,1,1,1,3,0,1,1,0,1},{1,1,1,1,1,0,1,1,0,1},{1,1,1,1,1,0,1,1,1,1},{1,1,1,1,1,0,0,0,1,1},{1,1,1,1,0,0,1,0,1,1},{1,1,1,1,0,1,1,0,1,1}};

    for (int linha = 0; linha < matriz.length; linha++)  {
        for (int coluna = 0; coluna < matriz[0].length; coluna++)     {
            System.out.print(matriz[linha][coluna] + " ");
        }
        System.out.println(" ");
    }
}

}

Output:
1 1 1 0 1 1 1 1 1 1
1 1 1 0 0 0 0 1 1 1
1 1 1 0 1 1 0 0 1 1
1 1 1 0 0 0 1 0 0 1
1 1 1 1 3 0 1 1 0 1
1 1 1 1 1 0 1 1 0 1
1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 0 0 0 1 1
1 1 1 1 0 0 1 0 1 1
1 1 1 1 0 1 1 0 1 1
(Os 1’s correspondem a paredes, o 3 é suposto ser o ponto de partida e o 0 é suposto ser os espaços abertos que devem ser percorridos para encontrar a saída) - Objetivo - mostrar o caminho percorrido desde o ponto de início à/às saída/s.

Acredito que você precise de algoritmos de busca. Dê uma pesquisada em algoritmos como Djikstra ou, mais especificamente, o A estrela (A Star ou a* ) . No fim, você vai obter algo como a imagem abaixo:

Fonte: https://github.com/vittin/A-Star

No seu caso, os quadrados cinzas seriam os 1, os brancos seriam os zeros, verde seria o 3 e os vermelhos seriam zeros que são saída, que você pode ter de alterar para diferenciar.

Abraço.

3 curtidas

Já estou a conseguir desenvolver o que pretendia. O que mostrou é muito complexo (pelo menos para mim que sou iniciante). Eu apenas pretendia um output do género:
1 1 1 3 1 1 1 1 1 1
1 1 1 3 0 0 0 1 1 1
1 1 1 3 1 1 0 0 1 1
1 1 1 3 3 0 1 0 0 1
1 1 1 1 3 3 1 1 0 1
1 1 1 1 1 3 1 1 0 1
1 1 1 1 1 3 1 1 1 1
1 1 1 1 1 3 3 3 1 1
1 1 1 1 3 3 1 3 1 1
1 1 1 1 3 1 1 3 1 1

Só para mostrar que o programa consegue encontrar as saídas.
Obrigado de qualquer maneira!

Então, para “apenas” fazer isso, você precisa implementar um algoritmo de busca, como o @TerraSkilll citou.
Se você é iniciante, então isso ainda não é atividade para você. :man_shrugging: