動態建樹加深搜之 模仿手機九鍵輸入法

2021-07-17 04:45:54 字數 1115 閱讀 8693

題目:poj1451

題意:給你乙個詞語出現次數的表,然後給你乙個輸入的數字串,每一步輸出它最可能出現的單詞。沒有了就輸出乙個東西。

解答:建乙個字典樹,然後深度遍歷這課樹。每遍歷一步都要記錄下當前的字串。最後輸出。要記錄當前位置最大值。如果該步沒有更新過最大值說明這一步找不到字母了。

用乙個str陣列記錄當前的串。用k記錄搜到多長了。注意回溯!還有,不管更新不更新答案,只要有就要繼續往下搜。

#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 1010;

const int maxn = 110;

const int sonnum = 26,base = 'a';

int dir[11] = ;

int max[maxn];

char ans[maxn][maxn],str[maxn],numarr[maxn];

int n,m,k,p,len;

struct trie

;trie *newtrie()

return temp;

}void insert(trie *pnt,char *s,int a)

else

tmp -> son[s[i]-base] -> num += a;

tmp = tmp -> son[s[i]-base];

}}void dfs(trie *pnt,int step)

if(k != len-1)

dfs(tmp->son[i],step+1);

k--;

}}int main()

scanf("%d",&m);

printf("scenario #%d:\n",i);

while(m--)

else

break;

}for(int j = w;j < len;j++)

printf("manually\n");

printf("\n");

}printf("\n");

}return 0;

}

迭代加深搜搜尋

對於可以用回溯法求解但解答樹的深度沒有明顯上限的題目,可以考慮使用迭代加深搜尋。經典問題 埃及分數問題 給出乙個分數,比如19 45,把它寫成若干個形如1 ri的分數的和的形式,比如19 45 1 5 1 6 1 18,要求分母不能重複使用並且使用的分數的個數最少。如果有多組個數相同的解,最後的分數...

動態建樹之 查字典

題目 poj2503 題意 給幾個單詞的意思,再給幾個單詞,查字典 解答 字典樹咯 注意節點定義,每個節點定義乙個字元陣列 注意 空行停止!include include include includeusing namespace std const int sonnum 26,base a st...

BST 二叉搜尋樹 (動態建樹與靜態建樹)

判斷兩棵樹是否是同一棵樹 先序遍歷和中序遍歷對應相同或者中序遍歷和後序遍歷對應相同 思路 兩個陣列分別存放建好的樹的先序遍歷以及正序遍歷結果,然後對比是否相等 題目意思 這題是 hdu 3791 題目描述 判斷兩序列是否為同一二叉搜尋樹序列 輸入 開始乙個數n,1 n 20 表示有n個需要判斷,n ...