Pagini recente » Cod sursa (job #2786093) | Cod sursa (job #1573509) | Cod sursa (job #463651) | Cod sursa (job #2166575) | Cod sursa (job #1363602)
#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;
}