문제 설명
땅 샤오밍 편은, 그 작은 n 행 및 m 열의 각 행에 공간이 분할되며, 각 컬럼의 길이는 1이다.
샤오 밍은 그들 중 일부는 작은 청소, 심은 잔디와 다른 작은 조각 광장 남아 선택했다.
잔디는 매우 빠르고, 매월, 잔디의 일부는 잔디의 작은 조각을 심어 경우가 소유하고, 아래로, 네 개의 작은 청소를 좌우 4 개의 작은 열린 공간 확장 될 것입니다 밖으로 성장할 것 자랍니다 그것은 잔디의 작은 조각이 될 것입니다.
케이 개월 후에 열린 공간에 잔디가 어떤에 배치, 샤오 밍을 알려주세요.
입력 포맷
입력의 제 1 라인의 두 정수 N, M을 포함한다.
이어서, N 행, m 문자를 포함하는 각각의 행은 오픈 스페이스 문자 사이에 공백이없는 초기 상태를 나타낸다. 소수점 경우, 문자 g 경우, 잔디의 종류를 나타내는, 열린 공간으로 표시됩니다.
다음에 정수 (k)를 포함한다.
출력 포맷
출력 N 행, m 문자를 포함하는 각 행 k는 상태 공간 개월이다. 문자의 g는, 긴 잔디를 나타내는 경우 소수점 경우, 열린 공간으로 표시됩니다.
샘플 입력
. 제 5
· G ...
...
... ... G
...
2
샘플 출력
GGGG.
GGGG.
GGGGG
.ggg.
예 규모와 평가 계약
2 <= N, m <실시 예에서 30 % 평가 = 20.
2 <= N, m <실시 예 70 %의 평가 용 = 100.
평가에 대한 모든 사용 예 2 <= N, m <= 1000,1 <= K <= 1000.
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);
}
}
}
}