Java recursivo laberinto

[Descripción del problema]
  La siguiente figura muestra una vista en planta de un laberinto, es un trastorno en el que la marca 1, en donde 0 se etiqueta aceptable.
010000
000100
001001
110000
  entrada de la esquina superior izquierda del laberinto, la exportación a la esquina inferior derecha, en el laberinto, sólo puede ir desde este lugar uno, en una de las direcciones izquierda y derecha.
  Para el laberinto anteriormente, a partir de la entrada, que puede ser por laberinto secuencialmente DRRURRDDDR, un total de 10 pasos. En la que D, T, L, R, respectivamente, abajo, arriba, izquierda, derecha de distancia.
Análisis Tema: análisis de la situación no puede ir, utilizando una vía recursiva.
Código es el siguiente:
public class CXL {
static int A [] [] = {{0,1,0,0,0,0}, {0,0,0,1,0,0}, {0,0,1 , 0,0,1}, {1,1,0,0,0,0}};
void Main (args String []) {public static
F (0,0);

}
static  void  f(int x,int y) {
	if(x==a.length-1&&y==a[0].length-1) {//判断是否到达终点
		print();
	}
	if(cansta(x,y,x,y+1)) {//向上
		a[x][y]=8;
		f(x,y+1);
		a[x][y]=0;
	}
	if(cansta(x,y,x+1,y)) {
		a[x][y]=8;
		f(x+1,y);
		a[x][y]=0;
	}
	if(cansta(x,y,x,y-1)) {
		a[x][y]=8;
		f(x,y-1);
		a[x][y]=0;
	}
	if(cansta(x,y,x-1,y)) {
		a[x][y]=8;
		f(x-1,y);
		a[x][y]=0;
	}
}
static boolean cansta(int x,int y,int ex,int ey) {//判断(x,y)能不能到(ex,ey)
	if(x<0||y<0) {//不能越过左边和上面
		return false;
	}
	if(x>=a.length||y>=a[0].length) {//不能越过右边与下面
		return false;
	}
	if(a[x][y]==1||a[x][y]==8) {//是1的跟走过的8不能走
		return false;
	}
	return true;
}
static void print() {//将各种情况输出
	System.out.println("得到一个解:");
	for(int i=0;i<a.length-1;i++) {
		for(int j=0;j<a[0].length-1;j++) {
			System.out.print(a[i][j]+" ");
		}
		System.out.println();
	}
}

}
Si un mejor algoritmo, por favor avise, gracias! ! !

Publicado 13 artículos originales · ganado elogios 0 · Vistas 118

Supongo que te gusta

Origin blog.csdn.net/vi_to/article/details/104969904
Recomendado
Clasificación