implementación de Java del puente taza azul claro analógico hierba

Descripción del problema
  Xiaoming pedazo de tierra, que va a dividir este espacio en pequeñas n filas y m columnas, cada fila y cada longitud de columna es 1.
  Xiao Ming eligió algunos de ellos pequeño claro, hierba sembrada y otras piezas pequeñas siguen siendo espacio abierto.
  La hierba crece muy rápido, todos los meses, algunos de la hierba crecerá a cabo, si un pequeño trozo de césped plantado, será de poseer arriba, abajo, izquierda y derecha de cuatro expansión espacio abierto pequeño, el pequeño claro de cuatro se convertirá en un pequeño trozo de hierba.
  Informe a Xiao Ming, k meses más tarde qué lugar hay hierba en el espacio abierto.
El formato de entrada
  de la primera línea de entrada contiene dos enteros n, m.
  Posteriormente n filas, cada fila que contiene caracteres M, el espacio abierto representa un estado inicial, no hay espacios entre las letras. Si un punto decimal, se representa como un espacio abierto, si las letras G, representa una especie de hierba.
  Siguiente contiene un entero k.
Salida de formato
  de salida de n filas, cada fila que contiene caracteres m, k representa un mes de espacio de estado. Si un punto decimal, se representa como un espacio abierto, si las letras G, representa la hierba.
entrada de la muestra
. 4. 5
.g ...
...
... ... G
...
2
de salida muestra
GGGG.
GGGG.
GGGGG
.ggg.
Opiniones acuerdo con el Ejemplo escala y
  para su evaluación por 30% en el Ejemplo, 2 <= n, m < = 20.
  Para la evaluación por 70% en el Ejemplo, 2 <= n, m < = 100.
  Para la evaluación todos los casos de uso, 2 <= n, m <= 1000,1 <= k <= 1,000.

package 第十三次模拟;

import java.util.Scanner;

public class Demo9草地 {
	public static int[][] bool;
	public static int[] start;
	public static int[] end;
	public static char[][] num  ;
	public static int k = 0, n = 0, m = 0;
	public static int[] x = { 0, 1, 0, -1 };
	public static int[] y = { 1, 0, -1, 0 };

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		m = sc.nextInt();
		  num = new char[n][m];
		for (int i = 0; i < n; i++) {
			String s = sc.next();
			num[i] = s.toCharArray();
		}
		k = sc.nextInt();
		sc.close();
		start = new int[m * n];
		end = new int[m * n];
		int temp = 0;
		bool = new int[n][m];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (num[i][j] == 'g') {
					start[temp] = i;
					end[temp++] = j;
				}
				else{
					bool[i][j]=-1;
				}
			}
		}
		for (int i = 0; i < temp; i++) {
			dfs(start[i],end[i],k);
		}
		for (int i = 0; i < n; i++) {
			for (int j = 0; j <m; j++) {
				System.out.print(num[i][j]);
			}
			System.out.println();
		}
	}

	public static void dfs(int xx, int yy, int kk) {
		
		bool[xx][yy]=kk;
		num[xx][yy]='g';
		for (int i = 0; i < 4; i++) {
			int newx = x[i] + xx;
			int newy = y[i] + yy;
			if ( newx >= 0 && newy >= 0 && newx < n && newy < m&&  kk - 1 > bool[newx][newy]) {
				dfs(newx, newy, kk - 1);
			}
		}
	}

}

Liberadas 1472 artículos originales · ganado elogios 10000 + · vistas 1,76 millones +

Supongo que te gusta

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