深度優先搜尋(DFS) 字串轉換

2021-06-09 15:26:45 字數 508 閱讀 7481

問題描述:

翻譯數字串,類似於**號碼翻譯:給乙個數字串,比如12259,對映到字母陣列,比如,1 -> a, 2-> b,... , 12 -> l ,... 26-> z。那麼,12259 -> lyi 或 abbei 或 lbei 或 abyi。輸入乙個數字串,判斷是否能轉換成字串,如果能,則列印所以有可能的轉換成的字串。

思路:採用深度優先,分別考慮用乙個數字字元轉換和兩個字元轉換,然後在進行後續的轉換。

#include using namespace std;

// 深度優先輸出

// str是待列印字串,需要預先分配空間,至少是帶轉換字串的長度

bool num_transform(char *num_str , int s , int e , char *str , int index)

{ if(s > e)

{ if(index != 0) //轉換到了數字串最尾

{ str[index] = '\0';

cout<

深度優先搜尋DFS

作為搜尋演算法的一種,dfs對於尋找乙個解的 np 包括npc 問題作用很大。但是,搜尋演算法畢竟是 時間複雜度是o n 的階乘級演算法,它的效率比較低,在資料規模變大時,這種演算法就顯得力不從心了。關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用...

深度優先搜尋 DFS

深度優先搜尋 縮寫dfs 有點類似廣度優先搜尋,也是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v 0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。你可以跳過第二節先看第三節,還是引用上篇文章的樣例...

深度優先搜尋(dfs)

深度優先搜尋的一般步驟 1 從頂點v出發,訪問v。2 找出剛才訪問過的頂點的第乙個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重複此步驟,直到剛訪問的頂點沒有沒有未被訪問過的鄰接點為止。3 返回前乙個訪問過的仍有未被訪問過的鄰接點的頂點,找出該頂點的下乙個未被訪問過的鄰接點,訪問該頂點。4 重複...