Cod sursa(job #1363602)

Utilizator 0051David Sera 0051 Data 27 februarie 2015 08:47:38
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>

using namespace std;

struct trie{
    int ap,fii;
    trie* fiu[26];

    trie()
    {
        ap=0;
        fii=0;
        for(int i=0;i<26;i++)
            fiu[i]=0;
    }
};

char c[100];
int dr;
trie *tr;

void add(char a[], trie* nod)
{
    if(a[0]==0)
    {
        nod->ap++;
        return;
    }
    if(a[0]!=0)
    {
        if(nod->fiu[a[0]-'a'] == 0){
            nod->fiu[a[0]-'a']=new trie();
            nod->fii++;
        }
        add(a+1,nod->fiu[a[0]-'a']);
    }
}

int elim(char a[], trie* nod)
{
    if(a[0]==0)
    {
        nod->ap--;
        if(nod->ap==0 && nod->fii==0)
        {
            delete nod;
            return 1;
        }
        return 0;
    }
    else
    {
        if(elim(a+1,nod->fiu[a[0]-'a'])==1)
        {
            nod->fii--;
            nod->fiu[a[0]-'a'] = 0;
        }
        if(nod->ap==0 && nod->fii==0)
        {
            delete nod;
            return 1;
        }
        return 0;
    }
}

void af(trie* nod)
{
    for(int l = 1 ; l <= nod->ap ; l++)
        cout << c << "\n";
    for(int i=0;i<26;i++)
    {
        if(nod->fiu[i] != 0)
        {
            c[++dr] = i + 'a';
            c[dr + 1] = 0;
            af(nod->fiu[i]);
            dr--;

        }
    }
}

int main()
{
    dr = -1;
    tr=new trie();
    char a[3][6]={"abcde", "loool", "boss"};
    add(a[0],tr);
    add(a[1],tr);
    add(a[2],tr);
    elim(a[0],tr);
    af(tr);

    return 0;
}