Si solo es un laberinto de 1 carril, puedes hacer esto:
En unas variables X e Y guardas la posición actual. (Por donde estás en cada momento).
Buscas cuál es el 1 o 2 que hay delante. Haces que unas variables tempX y tempY guarden los datos de X e Y, y X e Y las igualas a la nueva posición.
Ahora vuelves a buscar, con una condición: El nuevo 1 o 2 a buscar no puede estar en la posición anterior (tempX o tempY).
Con cada paso, muestras la pantalla.
Es el algoritmo que se me ocurre.
Solo para recorridos con 1 dirección y 1 de grosor en el camino./** Buscar unos o doses **/
for(int i=-1; i<2; i++)
for(int j=-1; j<2; j++)
if(!(x+i == tempX && y+j == tempY) && (i || j) && (vector[x+i][y+j] == 1 || vector[x+i][y+j] == 2)){
tempX = X;
tempY = Y;
X = X+i;
Y = Y+j;
}
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
// - Mostrar pantalla, comprobar si es un 2 para finalizar, etc, etc... -
//'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'
----------------Breve explicación de las condiciones:----------------!(x+i == tempX && y+j == tempY)
-Los nuevos valores NO pueden ser iguales a los anteriores (Para no retroceder en el laberinto)
(i || j)
-I y J NO pueden ser 0 (Significaría que nos situaremos en la misma casilla, donde estamos)
(vector[x+i][y+j] == 1 || vector[x+i][y+j] == 2)
-El siguiente paso en el laberinto DEBE ser un 1 o un 2 (Es el número asociado al camino)
Y bueno, suerte :3 Espero no haberme equivocado en nada jaja