trie樹,也叫字典樹,可以很方便的儲存很多個字串。以小寫英文單詞為例,trie樹就是一顆26叉樹,每乙個節點儲存乙個英文本母。根節點什麼也不儲存,從根節點開始,第一層就代表單詞的第乙個字母,向下直到沒有字母為止,就是乙個單詞。
poj2001 題意是給你最多1000個字串,要你對於每乙個字串,輸出它的最短的乙個字首,通過這個字首能切僅能在1000個字串中檢索到它自己。
#include
#include
#include
using namespace std;
const int maxn = 50000;
const int size = 26;
int ac[maxn][size]; //存放所有節點的大陣列,把所有節點存在乙個陣列裡,有點像鏈式向前星。存放的值是先乙個節點在這個大陣列中的位置。
int num[maxn]; //有多少個單詞用到了當前節點。
int top; //模擬鏈式向前星裡面的top,表示當前用過了多少節點。
int idx(char c)
void clear() //清空,只要把根節點清零就好了。
int new() //如果要用到乙個新的節點用這個函式,返回值是新節點在ac陣列中的位置。
void insert(char *s) //如果當前位置沒有走到過,就在ac陣列中騰乙個位置給它。
k=ac[k][c]; //走向下乙個節點。
num[k]++; //又有乙個單詞經過了當前節點。
}} //插入乙個新的單詞。
void find(char *s)
}printf("\n");
} //根據題意可以調整find函式,總體用法和insert函式差不多。。
char s[1005][100];
int main()
for(int i=0;ireturn 0;
}
POJ2001Trie樹的運用
字串的字首處理問題 trie樹的運用 同時字首標出讓其沒有歧義 思路就是從子串中在trie樹中找到能夠唯一標示的第乙個字元為止 accepted 276k 16ms include include include using namespace std typedef struct node nod...
演算法複習 trie樹(poj2001)
給出 n 個單詞 1 n 1000 求出每個單詞的非公共字首,如果沒有,則輸出自己。輸入 n 個單詞,每行乙個,每個單詞都是由 1 20 個小寫字母構成。輸出 n 行,每行由乙個空格的兩部分,第一部分是輸入的單詞,第二部分是該單詞在所有單詞中的非公共字首,如果沒有,則輸出自己。輸入 複製 carbo...
trie字典樹 模板題
字典樹是一種實現字串快速檢索的多叉樹結構。每個節點都擁有很多個指標。1 include 2 include 3 using namespace std 4 5 const int n 1e6 5,m 5e5 5 6 7 int trie m 26 tot 0,cnt m 陣列模擬樹,8 cnt i ...