您的位置:首页 > 其它

小明空地种草(暴力破解)

2020-05-11 04:10 537 查看

题目

小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些,
如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。

样例输入

[code]4 5
.g...
.....
..g..
.....
2

样例输出
gggg.
gggg.
ggggg
.ggg.

题目分析

分析题目,想要让最开始的这个月的草在一个月向相邻的地方扩展,那么就需要用一个二维数组模拟上下左右,每个月之后都执行一次这个二维数组,但是每次执行都有条件,不能超过原有的地界(输入的信息可以看成一个二维数组),同时如果扩展的下一个方向字符为 . 那么我们将它变为 g 。

因为给了月份,所以我们上述所需要做的事情就要循环0-(月份-1)次即可。

代码分析

[code]static int k;
public static void main(String [] args) {

Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();    // 行
int m = scanner.nextInt();    // 列
char[][] g = new char
[m];  // 草
int[][] arr = new int
[m];  // 临时
for (int i = 0; i < n; i++) {
g[i] = scanner.next().toCharArray(); // 强转字符数组
}
k = scanner.nextInt();
int index = 0;
int[][] direction = new int[][] { { 0, -1 }, { 0, 1 }, { -1, 0 }, { 1, 0 } }; // 四个方向
while (index < k) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (g[i][j] == 'g') {
for (int k = 0; k < direction.length; k++) {
int x = i + direction[k][0];
int y = j + direction[k][1];
if (x >= 0 && y >= 0 && x < n && y < m && g[x][y] == '.') {
arr[x][y] = 1;   //标记长草
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] != 0) {
g[i][j] = 'g';  // 原来
}
}
}
index++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(g[i][j]);
}
System.out.println();
}
}

小剧场:加油!奥利给!

看-清 原创文章 27获赞 1访问量 828 关注 私信
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: