UVA 1556 - Disk Tree
题意:给定一些字符串,表示目录,要求输出整体目录的结构
思路:跟Trie树差不多,只不过是每个结点存放的是一个字符串,利用map映射即可
代码:
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <string> #include <map> #include <iostream> using namespace std; const int N = 40005; int n; char str[85]; struct Node { string name; map<string, int> vis; } node[N]; int sz; void insert(char *str) { int len = strlen(str); str[len] = '\\'; int u = 0; for (int i = 0; i <= len; i++) { string tmp = ""; while (str[i] != '\\') { tmp += str[i]; i++; } if (!node[u].vis.count(tmp)) { node[sz].vis.clear(); node[sz].name = tmp; node[u].vis[tmp] = sz++; } u = node[u].vis[tmp]; } } void init() { sz = 1; node[0].vis.clear(); while (n--) { scanf("%s", str); insert(str); } } void print(int u, int d) { if (u) { for (int i = 0; i < d; i++) printf(" "); cout << node[u].name << endl; } for (map<string, int>::iterator it = node[u].vis.begin(); it != node[u].vis.end(); it++) { print(it->second, d + 1); } } int main() { while (~scanf("%d", &n)) { init(); print(0, -1); printf("\n"); } return 0; }
UVA 1556 - Disk Tree(Trie)
时间: 2024-10-11 19:50:27