P1058 立体图

2 篇文章 0 订阅

说实话,这题我是抄题解过的。

但是做完之后发现这个题也并不是非常难理解(但是不太好写),主要有一下需要注意的地方:

  • 覆盖顺序:从下到上,从左往右,从前往后

  • 观察出每个立方体的特殊点坐标,比如这里选的是左下角

  • 我这里的图是反着存储的

#include <iostream>
#include <cstdio>

using namespace std;

const int N = 55;
int n, m;
int h[N][N];
int maxx, maxy;
char ans[1000][1000];
int k[6] = { 2, 1, 0, 0, 0, 0 };
int kc[6] = { 6, 6, 6, 6, 5, 4 };
char b[10][10] = {
	"  +---+",
	" /   /|",
	"+---+ |",
	"|   | +",
	"|   |/ ",
	"+---+	",
};

void fg(int x, int y) {
		for(int i = 5; i >= 0; i--)
			for(int j = k[i]; j <= kc[i]; j++) {
				ans[5 - i + x][j + y] = b[i][j];
				if(5 - i + x > maxx) maxx = 5 - i + x;
				if(j + y > maxy) maxy = j + y;
			}
}

int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i++)	
		for(int j = 0; j < m; j++)
			cin >> h[i][j];
	for(int i = 1; i <= n; i++)
		for(int j = 0; j < m; j++)
		 	for(int k = 0; k < h[i][j]; k++) {
		 		fg((n - i) * 2 + 1 + 3 * k, (n - i) * 2 + 1 * 4 * j);	
			}	
	for(int i = maxx; i >= 1; i--) {
		for(int j = 0; j <= maxy; j++) 
			if(ans[i][j] == '\000') cout << ".";
			else printf("%c", ans[i][j]);
		printf("\n");	
	}
	return 0;	
}

最后这里是图每步覆盖的坐标和图的生成过程(图是反着存的),这样就更容易理解了:

5 5
...........
...........
...........
...........
....+---+..
....|   |\.
....|   | +
....+---+ |
.....\   \|
......+---+
8 5
...........
...........
...........
...........
....+---+..
....|   |\.
....|   | +
....+---+ |
....|   |\|
....|   | +
....+---+ |
.....\   \|
......+---+
5 9
...............
...............
...............
...............
....+---+---+..
....|   |   |\.
....|   |   | +
....+---+---+ |
....|   |\   \|
....|   | +---+
....+---+ |....
.....\   \|....
......+---+....
8 9
...............
...............
...............
...............
....+---+---+..
....|   |   |\.
....|   |   | +
....+---+---+ |
....|   |   |\|
....|   |   | +
....+---+---+ |
.....\   \   \|
......+---+---+
5 13
...................
...................
...................
...................
....+---+---+---+..
....|   |   |   |\.
....|   |   |   | +
....+---+---+---+ |
....|   |   |\   \|
....|   |   | +---+
....+---+---+ |....
.....\   \   \|....
......+---+---+....
5 17
.......................
.......................
.......................
.......................
....+---+---+---+---+..
....|   |   |   |   |\.
....|   |   |   |   | +
....+---+---+---+---+ |
....|   |   |\   \   \|
....|   |   | +---+---+
....+---+---+ |........
.....\   \   \|........
......+---+---+........
8 17
.......................
.......................
.......................
.......................
....+---+---+---+---+..
....|   |   |   |   |\.
....|   |   |   |   | +
....+---+---+---+---+ |
....|   |   |\  |   |\|
....|   |   | +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
3 3
.......................
.......................
..+---+................
..|   |\...............
..|   | +---+---+---+..
..+---+ |   |   |   |\.
...\   \|   |   |   | +
....+---+---+---+---+ |
....|   |   |\  |   |\|
....|   |   | +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
6 3
.......................
.......................
..+---+................
..|   |\...............
..|   | +---+---+---+..
..+---+ |   |   |   |\.
..|   |\|   |   |   | +
..|   | +---+---+---+ |
..+---+ |   |\  |   |\|
...\   \|   | +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
3 7
.......................
.......................
..+---+---+............
..|   |   |\...........
..|   |   | +---+---+..
..+---+---+ |   |   |\.
..|   |\   \|   |   | +
..|   | +---+---+---+ |
..+---+ |   |\  |   |\|
...\   \|   | +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
6 7
.......................
.......................
..+---+---+............
..|   |   |\...........
..|   |   | +---+---+..
..+---+---+ |   |   |\.
..|   |   |\|   |   | +
..|   |   | +---+---+ |
..+---+---+ |\  |   |\|
...\   \   \| +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
3 11
.......................
.......................
..+---+---+---+........
..|   |   |   |\.......
..|   |   |   | +---+..
..+---+---+---+ |   |\.
..|   |   |\   \|   | +
..|   |   | +---+---+ |
..+---+---+ |\  |   |\|
...\   \   \| +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
3 15
.......................
.......................
..+---+---+---+---+....
..|   |   |   |   |\...
..|   |   |   |   | +..
..+---+---+---+---+ |\.
..|   |   |\   \   \| +
..|   |   | +---+---+ |
..+---+---+ |\  |   |\|
...\   \   \| +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
1 1
+---+..................
|   |\.................
|   | +---+---+---+....
+---+ |   |   |   |\...
.\   \|   |   |   | +..
..+---+---+---+---+ |\.
..|   |   |\   \   \| +
..|   |   | +---+---+ |
..+---+---+ |\  |   |\|
...\   \   \| +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
4 1
+---+..................
|   |\.................
|   | +---+---+---+....
+---+ |   |   |   |\...
|   |\|   |   |   | +..
|   | +---+---+---+ |\.
+---+ |   |\   \   \| +
.\   \|   | +---+---+ |
..+---+---+ |\  |   |\|
...\   \   \| +-|   | +
....+---+---+ |.+---+ |
.....\   \   \|..\   \|
......+---+---+...+---+
7 1
+---+..................
|   |\.................
|   | +---+---+---+....
+---+ |   |   |   |\...
|   |\|   |   |   | +..
|   | +---+---+---+ |\.
+---+ |   |\   \   \| +
|   |\|   | +---+---+ |
|   | +---+ |\  |   |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
1 5
+---+---+..............
|   |   |\.............
|   |   | +---+---+....
+---+---+ |   |   |\...
|   |\   \|   |   | +..
|   | +---+---+---+ |\.
+---+ |   |\   \   \| +
|   |\|   | +---+---+ |
|   | +---+ |\  |   |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
4 5
+---+---+..............
|   |   |\.............
|   |   | +---+---+....
+---+---+ |   |   |\...
|   |   |\|   |   | +..
|   |   | +---+---+ |\.
+---+---+ |\   \   \| +
|   |\   \| +---+---+ |
|   | +---+ |\  |   |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
1 9
+---+---+---+..........
|   |   |   |\.........
|   |   |   | +---+....
+---+---+---+ |   |\...
|   |   |\   \|   | +..
|   |   | +---+---+ |\.
+---+---+ |\   \   \| +
|   |\   \| +---+---+ |
|   | +---+ |\  |   |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
1 13
+---+---+---+---+......
|   |   |   |   |\.....
|   |   |   |   | +....
+---+---+---+---+ |\...
|   |   |\   \   \| +..
|   |   | +---+---+ |\.
+---+---+ |\   \   \| +
|   |\   \| +---+---+ |
|   | +---+ |\  |   |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
4 13
+---+---+---+---+......
|   |   |   |   |\.....
|   |   |   |   | +....
+---+---+---+---+ |\...
|   |   |\  |   |\| +..
|   |   | +-|   | + |\.
+---+---+ |\+---+ |\| +
|   |\   \| +\   \|-+ |
|   | +---+ |\+---+ |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
+---+---+---+---+......
|   |   |   |   |\.....
|   |   |   |   | +....
+---+---+---+---+ |\...
|   |   |\  |   |\| +..
|   |   | +-|   | + |\.
+---+---+ |\+---+ |\| +
|   |\   \| +\   \|-+ |
|   | +---+ |\+---+ |\|
+---+ |\   \| +-|   | +
.\   \|-+---+ |.+---+ |
..+---+  \   \|..\   \|
......+---+---+...+---+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值