字典树 之 poj 1056

来源:互联网 发布:js点击播放音频 编辑:程序博客网 时间:2024/06/05 19:34
//  [7/5/2014 Sjm]/*字典树,找前缀。具体求解思路同:字典树 之 hdu 1671 poj 3630*/
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;const int MAX = 2;struct Trie{bool Judge;Trie* next[2];Trie(){Judge = false;memset(next, NULL, sizeof(next));}};Trie* Root;bool Cre_Sea_Trie(char* str){int Jdg1 = true, Jdg2 = false;int len = strlen(str);Trie* p = Root;for (int i = 0; i < len; i++) {int pos = str[i] - '0';if (!(p->next[pos])) {p->next[pos] = new Trie;Jdg1 = false;}else {if (p->next[pos]->Judge) {Jdg2 = true;break;}}p = p->next[pos];}p->Judge = true;return (Jdg1 || Jdg2);}void DelTrie(Trie* T) {for (int i = 0; i < MAX; i++) {if (T->next[i]) {DelTrie(T->next[i]);}}delete[] T;}int main(){//freopen("input.txt", "r", stdin);char str[10][15];int num = 0, mycount = 0;while (~scanf("%s", str[num])) {if (strcmp(str[num], "9") == 0) {Root = new Trie;mycount++;int i;for (i = 0; i < num; i++) {if (Cre_Sea_Trie(str[i])) {printf("Set %d is not immediately decodable\n", mycount);break;}}if (i == num) {printf("Set %d is immediately decodable\n", mycount);}DelTrie(Root);num = 0;continue;}num++;}return 0;}
0 0