📄 1361.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1361 on 2005-12-01 at 22:09:40 */
#include <cstdio>
#include <cstring>
const int MAX = 128;
class Room {
public:
int num;
int doorn;
int used;
int door[MAX];
void init(int);
void link(Room&);
};
void Room::init(int n) {
if(num == 1) {
used = -1;
} else {
used = 0;
}
doorn = n;
memset(door, 0, sizeof(door));
}
void Room::link(Room &r) {
used++;
r.used++;
door[r.num]++;
r.door[num]++;
}
int main()
{
Room room[MAX];
int stack[MAX], top;
int T, t, n, m, cur;
int i, j, k;
scanf("%d", &T);
for(i = 0; i < MAX; i++) {
room[i].num = i;
}
for(t = 0; t < T; t++) {
cur = top = n = 0;
while(scanf("%d", &m) == 1) {
if(m == 0) {
break;
} else {
if(m > 0) {
n++;
room[n].init(m);
room[n].link(room[cur]);
stack[top++] = cur;
cur = n;
} else {
room[stack[top+m]].link(room[cur]);
}
while(room[cur].doorn == room[cur].used) {
cur = stack[--top];
}
}
}
for(i = 1; i <= n; i++) {
printf("%d", i);
for(j = 1; j <= n; j++) {
for(k = 0; k < room[i].door[j]; k++) {
printf(" %d", j);
}
}
putchar('\n');
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -