题目描述
X星球没有监狱,对于哪些犯罪的人。就是把他们放入迷宫里慢慢惩罚他们。
你作为一个迷宫构建师。你的任务就是生成符合要求的迷宫。
对于一个大小为nm的迷宫,第一行房间编号从左往右为1~m, 第二行
房间的编号为m+1~2m, 以此类推。共有n*m个房间。
我们希望有的房间能到达另外的房间。所以对生成的迷宫有q个要求
对于每一个要求:k ch。k代表房间编号,ch代表开口的方向。一共有两种取值:
➀W:向下开口 ➁R:向右开口。
目数据保证:➀迷宫的四周墙壁没有开口。 ➁要求可能重复
输入
第一行输入三个整数:n, m, q。 (1<=n<=50, 1<=m<=50, 0=<q<=2nm-n-m)
接下来的q行,每一行输入一个k, ch (1<=k<=n*m, ch={‘W’, ‘R’})
输出
生成符合要求的迷宫
样例输入
4 6 6
16 W
11 R
11 R
16 W
1 R
22 R
样例输出
+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+
| | | | | |
+---+---+---+---+---+---+
| | | | | | |
+---+---+---+ +---+---+
| | | | | |
+---+---+---+---+---+---+
只有向右和向下的开口,所以只需要找到向右和向下的位置关系,然后使开头打印空格就可以了
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m, q, k, x, y;
char ch;
cin >> n >> m >> q;
string a[51], b[52];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
b[i] += "+---";
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
a[i] += "| ";
while (q--){
cin >> k >> ch;
y = (k - 1) / m + 1; //y为纵坐标,避免恰好除整,所以减个1处以每行的房间数
x = (k - (y - 1)*m) * 4; //x为横坐标,减去已经够行的房间数*4,就是对应房间的横坐标
if (ch == 'R')a[y][x] = ' '; //如果是向右,直接把向右的开头出变成空格
if (ch == 'W'){ //如果是向下,把对应位置的减号变成空格
for (int i = x - 1; i >= x - 3; i--)
b[y][i] = ' ';
}
}
for (int i = 1; i <= m; i++)
cout << "+---"; cout << "+" << endl;
for (int i = 1; i <= n; i++){
for (int j = 0; j <= m * 4 - 1; j++)
cout << a[i][j];
cout << "|" << endl; //最右边的丨
for (int j = 0; j <= m * 4 - 1; j++)
cout << b[i][j];
cout << "+" << endl; //最右边的+
}
return 0;
}