Java aplicación LeetCode 529 Buscaminas (DFS)

529. Buscaminas

Juguemos Buscaminas!

Dada una matriz bidimensional representa el carácter del tablero de juego. 'M' representa una mina no excavado, 'E' representa un cuadrados no vacíos excavados, 'B' indica que no hay adyacente (superior, inferior, izquierda, derecha, y los cuatro diagonal) tiene minas excavadas en la casilla en blanco, digital ( '1' a '8') indica cuántas minas han sido cavada de la caja con este vecino, 'X' indica que una mina ha sido excavado hacia arriba.

En todo pero ahora dado caja excavado ( 'M' o 'E') a una posición de clic (fila y el índice de la columna), de acuerdo con las siguientes reglas, una posición de retorno respectivo correspondiente al panel de clic:

Si una mina ( 'M') fue desenterrado, el juego ha terminado - el cambio a 'X'.
Si una mina cuadrados vacíos ( 'E') adyacentes excavadas, se modifica ( 'B'), y la totalidad de su bloque vecino, y debe ser revelada de forma recursiva.
Si se excava una mina con al menos una de las plazas abiertos adyacentes ( 'E'), cambie a una digital ( '1' a '8'), que representa el número de minas adyacentes.
Si hace clic en este, la ausencia de más bloques se manifieste, se devuelve el panel.

Ejemplo 1:

entrada:

[[ 'E', 'E', 'E', 'E', 'E'],
[ 'E', 'E', 'M', 'E', 'E'],
[ 'E', 'E', 'E', 'E', 'E'],
[ 'E', 'E', 'E', 'E', 'E']]

Haga clic en: [3,0]

salida:

[[ 'B', '1', 'E', '1', 'B'],
[ 'B', '1', 'M', '1', 'B'],
[ 'B', '1', '1', '1', 'B'],
[ 'B', 'B', 'B', 'B', 'B']]

Explicación:
Aquí Insertar imagen Descripción
Ejemplo 2:

entrada:

[[ 'B', '1', 'E', '1', 'B'],
[ 'B', '1', 'M', '1', 'B'],
[ 'B', '1', '1', '1', 'B'],
[ 'B', 'B', 'B', 'B', 'B']]

Haga clic en: [1,2]

salida:

[[ 'B', '1', 'E', '1', 'B'],
[ 'B', '1', 'X', '1', 'B'],
[ 'B', '1', '1', '1', 'B'],
[ 'B', 'B', 'B', 'B', 'B']]

explicación:
Aquí Insertar imagen Descripción

nota:

anchura de la matriz de entrada y de altura en el intervalo [1, 50].
Haga clic en la ubicación no sólo es extraído de la caja ( 'M' o 'E'), esto también significa que el panel incluye al menos una caja puede hacer clic.
Panel de entrada no será el fin del estado del juego (es decir, las minas han sido excavados hacia arriba).
Para simplificar, las reglas no están mencionados pueden ser ignorados en este problema. Por ejemplo, cuando el juego es que no es necesario para desenterrar todas las minas, tenga en cuenta todas las circunstancias que podrían ganar un juego o marcar la casilla.

PD:
todas las demás cosas que decir, sobre todo cuadrícula en blanco, es necesario seguir de forma recursiva, otros casos se encuentran en las minas o algo cuando retorno directo en él

class Solution {
    static public char[][] updateBoard(char[][] board, int[] click) {
       
   	return visit(board,click[0],click[1]);	
   }
	
  static public char[][] visit(char[][] board, int x,int y){
	   if(board[x][y] == 'M') {
		   board[x][y] = 'X';
		   return board;
	   }
   	int count = 0;
       for(int i =x-1;i<=x+1;i++)
          for(int j =y-1; j<= y+1;j++){
        	  if(i>=0 && i < board.length && j>=0 && j<board[0].length)
              if(board[i][j] == 'M')
                   count++;
           }
   	if(count != 0 ) {
   		board[x][y] = (char)(count+'0');
   	}
   	else {
   		board[x][y] = 'B';
   	    for(int i =x-1;i<=x+1;i++)
               for(int j =y-1; j<= y+1;j++){
            	   if(i>=0 && i < board.length && j>=0 && j<board[0].length)
                   if(board[i][j] == 'E')
                       visit(board,i,j);
               }

   	}
   	
   	return board;
   }
}
Liberadas 1621 artículos originales · ganado elogios 20000 + · vistas 2,69 millones +

Supongo que te gusta

Origin blog.csdn.net/a1439775520/article/details/105068303
Recomendado
Clasificación