POJ 1057 FILE MAPPING

来源:互联网 发布:sql语句经典例题 编辑:程序博客网 时间:2024/05/01 23:15

1. 这道题根本不会做,直接看的别人的解体报告,看了别人的解题报告的算法说明,还是不会做,只好看代码了;

2. 这篇博客写得比我写得好(http://jovesky.info/blog/2011/08/12/poj-1057-file-mapping-c-edition/),我就是看人家的看懂的;

3. 递归+vector,一层套一层,以后还得看看怎么做的。现在思路会了,但是vector还是不会用,上午刚看了primer还是不会用,另外细节问题很繁琐,日后就是为了学递归也得再做一遍这道题。




#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;struct node{    vector<string> file;    vector<node> dir;    string name;};int end = 0;void fileinput(node &now){    string tmp;    while (1)    {        cin >> tmp;        if (tmp[0] == '#')        {            end = 1;            break;        }        else if (tmp[0] == 'f')            now.file.push_back(tmp);        else if (tmp[0] == 'd')        {            node d;            d.name = tmp;            fileinput(d);            now.dir.push_back(d);        }        else break;    }    sort(now.file.begin(), now.file.begin() + now.file.size());    return;}void fileoutput(node now, int n){    int i, j;    for (i = 0; i < n; i++)        cout << "|     ";    cout << now.name << endl;    for (i = 0; i < (int)now.dir.size(); i++)        fileoutput(now.dir[i], n + 1);    for (i = 0; i < (int)now.file.size(); i++)    {        for (j = 0; j < n; j++)            cout << "|     ";        cout << now.file[i] << endl;    }    return;}int main(){    int cases = 1;    while (cases)    {        node root;        root.name = "ROOT";        fileinput(root);        if (end)            break;        cout << "DATA SET " << cases << ':' << endl;        fileoutput(root, 0);        cases++;        cout << endl;    }    return 0;}