在一个n×m 的矩形上进行粉刷工作(初始时,矩形的格子无色),每次选择一个起点和一个方向,将连续的格子刷成同样的颜色,直到碰到矩形边界后停止;已经有颜色的格子中的颜色将会被覆盖.请你编程模拟粉刷矩形的过程,并输出每个格子的颜色。输入第一行三个整数n,m,k 表示矩形的大小是 n×m、共有 k 次粉刷操作。 接下来 k 行,每行都是空格分隔的两个整数和两个字符,分别表示粉刷起点的行号、列号、粉刷的颜色(用小写字母表示)、粉刷的方向(R, U, L, D 分别表示向右、向上、向左、向下)。c++代码
时间: 2024-02-11 18:07:15 浏览: 223
以下是C++的代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
char mat[105][105];
void paint(int x, int y, char color, char dir, int n, int m) {
int dx, dy;
if (dir == 'R') dx = 0, dy = 1;
else if (dir == 'U') dx = -1, dy = 0;
else if (dir == 'L') dx = 0, dy = -1;
else if (dir == 'D') dx = 1, dy = 0;
while (x >= 1 && x <= n && y >= 1 && y <= m) {
mat[x][y] = color;
x += dx, y += dy;
}
}
int main() {
int n, m, k;
cin >> n >> m >> k;
memset(mat, '.', sizeof(mat));
for (int i = 1; i <= k; i++) {
int x, y;
char color, dir;
cin >> x >> y >> color >> dir;
paint(x, y, color, dir, n, m);
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << mat[i][j];
}
cout << endl;
}
return 0;
}
```
代码思路:
首先定义一个字符型数组 `mat` 代表矩阵,用 `.` 表示未涂色的格子。
然后定义一个函数 `paint`,接受粉刷起点的坐标、颜色、方向、矩阵的大小作为参数。在函数体内,根据方向选择对应的移动方式,直到碰到矩形边界后停止,将路径上的所有格子都涂上指定的颜色。
在主函数中,先输入矩形的大小和粉刷操作的次数,然后对于每个操作,调用 `paint` 函数进行涂色。最后输出矩形中每个格子的颜色即可。
注意:由于题目中没有说明矩形的大小范围,所以数组的大小需要设置得足够大。
阅读全文