你有一个垂直放置的矩形木板,这块木板被分成若干个正方形单元格。我们用一个二维字符数组board从下往上,从左往右描述这块木板(即board[0]表示最上面的那一行)。有些格子是障碍(用’x’表示),有些格子有沙子(用'o'表示),有些格子是空的(用'.'表示)。
你将模拟一次沙子的降落,规则如下:
1)障碍不能移动
2)当有一个空格突然出现在有沙子的格子的下面,那么沙子立刻落到空格中。
输出最终的木板。
输入
第一行两个整数r和c,分别表示行数和列数。
接下来有一个r行c列的二维数组board,意义如题目所述。
输出
输出一个r行c列的二位数组,表示最终的木板。
样例输入
|
样例输出
|
5 5
ooooo
..x..
....x
.....
....o
|
..o..
..x.o
....x
.....
oo.oo
|
这题解法有好多,但用迭代的思路来解会发现格外的简单。首先我们观察局部,某位置的沙子会不会往下掉,只取决于它下方是不是空格,如果是就向掉下一格,不是就原地不动,只需要思考一格就可以了,至于它能不能继续再向下掉那是下一次迭代的事情。代码片断如下:
5 5 (n行m列,0<n,m<100)
ooooo
..x..
....x
.....
....o
..o..
..x.o
....x
.....
oo.oo
6 5
ooooo
..x..
....x
.....
....o
....o
..o..
..x.o
....x
.....
....o
oo.oo