题目
input:
7
b
c
ab\cd
a\bc
ab\d
a\d\a
a\d\z\
思路
善用STL
代码
#include<bits/stdc++.h>
using namespace std;
struct folder
{
string name;
map<string,folder*> folder_child;
set<string> file_child;
};
void print(const folder* root, int n = 0)
{
for(int i = 0; i < n; i++)
cout << " ";
cout << root->name << endl;
for(map<string,folder*>::const_iterator it = root->folder_child.begin();
it != root->folder_child.end(); it++
)
{
print(it->second, n + 1);
}
for(set<string>::iterator it = root->file_child.begin();
it != root->file_child.end(); it++
)
{
for(int i = 0; i <= n; i++)
cout << " ";
cout << *it << endl;
}
}
int main()
{
folder* root = new folder;
root->name = "root";
int n;
cin >> n;
for(int i = 0; i < n; i++)
{
string str;
cin >> str;
int loc;
string temp_file;
folder* folder_opener = root;
while((loc = str.find('\\')) != str.npos)
{
temp_file = str.substr(0,loc);
str = str.substr(loc+1);
if(! folder_opener->folder_child[temp_file])
{
folder_opener->folder_child[temp_file] = new folder;
folder_opener->folder_child[temp_file]->name = temp_file;
}
folder_opener = folder_opener->folder_child[temp_file];
//cout << temp_file << " " << str << endl;
}
if(str != "")
{
folder_opener->file_child.insert(str);
}
} print(root);
}