zoukankan      html  css  js  c++  java
  • uva 1556

    题目连接:uva 1556 - Disk Tree

    题目大意:给出N个文件夹关系,然后依照字典序输出整个文件文件夹。

    解题思路:以每一个文件夹名作为字符建立一个字典树就可以,每一个节点的关系能够用map优化。

    #include <cstdio>
    #include <cstring>
    #include <map>
    #include <string>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    const int maxn = 50005;
    typedef map<string, int>::iterator iter;
    
    struct Tire {
        int sz;
        map<string, int> g[maxn];
    
        void init();
        void insert(string s);
        void put(int u, int d);
    }tree;
    
    int main () {
        int n;
        string s;
        while (cin >> n && n) {
            tree.init();
            for (int i = 0; i < n; i++) {
                cin >> s;
                s += '\';
                tree.insert(s);
            }
            tree.put(0, 0);
            cout << endl;
        }
        return 0;
    }
    
    void Tire::init() {
        sz = 1;
        g[0].clear();
    }
    
    void Tire::insert(string s) {
    
        int u = 0;
        string word = "";
    
        for (int i = 0; i < s.length(); i++) {
            if (s[i] == '\') {
    
                if (!g[u].count(word)) {
                    g[sz].clear();
                    g[u][word] = sz++;
                }
    
                u = g[u][word];
                word = "";
            } else
                word += s[i];
        }
    }
    
    void Tire::put (int u, int d) {
    
        for (iter i = g[u].begin(); i != g[u].end(); i++) {
            for (int j = 0; j < d; j++)
                cout << " ";
            cout << i->first << endl;
            put(i->second, d + 1);
        }
    }

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Java加密作业
    作业
    思考动手
    方法作业
    课堂2数字输出
    字符型转整形
    课堂验证作业
    Eclipse @override报错解决
    用注解配置动态代理
    动态代理模式
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4716069.html
Copyright © 2011-2022 走看看