简单题
View Code
#include#include #include #include #include using namespace std; int dcount; int n; char word[1005][50]; int father[1005]; int fa; int dir[1005][1005]; int num[1005]; int id[1005]; void ins(char *st) { if (strcmp(st, "]") == 0) { fa = father[fa]; return; } if (st[0] == 'f') { dir[fa][num[fa]++] = n; return; } father[dcount] = fa; id[dcount] = n; fa = dcount++; } bool cmp(const int &a, const int &b) { return strcmp(word[a], word[b]) < 0; } void print(int a, int d) { for (int i = 0; i < a; i++) printf("| "); printf("%s\n", word[id[d]]); for (int i = d + 1; i < dcount; i++) if (father[i] == d) print(a + 1, i); for (int i = 0; i < num[d]; i++) { for (int j = 0; j < a; j++) printf("| "); printf("%s\n", word[dir[d][i]]); } } int main() { //freopen("t.txt", "r", stdin); strcpy(word[0], "ROOT"); int t = 0; while (scanf("%s", word[1]), strcmp("#", word[1]) != 0) { t++; memset(num, 0, sizeof(num)); dcount = 1; n = 1; fa = 0; father[0] = -1; ins(word[n]); while (scanf("%s", word[++n]), strcmp("*", word[n]) != 0) ins(word[n]); for (int i = 0; i < dcount; i++) sort(dir[i], dir[i] + num[i], cmp); printf("DATA SET %d:\n", t); print(0, 0); putchar('\n'); } return 0; }