poj 2001 Trie樹 模板題

2021-06-21 22:00:00 字數 983 閱讀 9135

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 ...