📄 1692.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1692 on 2005-09-28 at 20:30:38 */
#include <cstdio>
#include <cstring>
#define MAX 128
class BTreeNode {
public:
char vary;
int order;
char story[300];
char end[16];
bool visited;
BTreeNode *left;
BTreeNode *right;
void init(char v, char *s, BTreeNode *l, BTreeNode *r, char *e, int o) {
strcpy(story, s);
vary = v;
order = o;
visited = false;
if(v == 'C') {
left = l;
right = r;
end[0] = 0;
} else {
left = NULL;
right = NULL;
strcpy(end, e);
}
}
bool searchEnd(int i, int *floor, int *way) {
bool findEnd = false;
if(!visited) {
visited = true;
} else {
return false;
}
way[i] = order;
if(vary == 'E') {
if(!strcmp(end, "HAPPY")) {
*floor = i;
return true;
} else {
return false;
}
} else {
findEnd = left->searchEnd(i+1, floor, way);
if(!findEnd) {
findEnd = right->searchEnd(i+1, floor, way);
}
return findEnd;
}
}
};
int main()
{
BTreeNode *Node[MAX];
char vary, con[300], end[16], ch;
int test, page, lchoice, rchoice;
int i, j, len;
bool begin;
int way[MAX], floor;
for(i = 0; i < MAX; i++) {
Node[i] = new BTreeNode;
}
scanf("%d", &test);
for(i = 1; i <= test; i++) {
scanf("%d", &page);
for(j = 1; j <= page; j++) {
while(getchar() != '\n')
;
vary = getchar();
begin = false;
for(len = 0; true; ) {
ch = getchar();
if(ch == '"') {
if(!begin) {
begin = true;
} else {
con[len] = 0;
break;
}
} else if(ch == ' ') {
if(begin) {
con[len++] = ch;
}
} else {
con[len++] = ch;
}
}
if(vary == 'C') {
scanf("%d %d", &lchoice, &rchoice);
end[0] = 0;
} else {
scanf("%s", end);
lchoice = 0;
rchoice = 0;
}
Node[j]->init(vary, con, Node[lchoice], Node[rchoice], end, j);
}
Node[1]->searchEnd(1, &floor, way);
printf("STORY %d\n", i);
for(j = 1; j <= floor; j++) {
printf("%s\n", Node[way[j]]->story);
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -