1樓:匿名使用者
深搜、回溯演算法、前序遍歷等通常採用的是類似。
dfs(current_node){
for node in next_node and node not visited
dfs(node);
的遞迴呼叫方式。
而在這一過程中,系統在呼叫函式時會自動在棧中分配空間,函式返回時又釋放空間。
即,遞迴呼叫的過程本質上就是棧的應用。
所以你的問題,棧和樹並不矛盾。這個說法不是很恰當。對樹、圖等的遍歷,通常在實現方式上都是遞迴呼叫函式,而系統在這期間就應用了棧。
所以你會覺得可以用棧來實現。但並不是說棧和樹並不矛盾。只是說明在遍歷樹的過程中可以應用棧這種資料結構。
順便說下手寫棧和直接遞迴呼叫的一些區別:
自己手寫棧的話,相對直接遞迴呼叫會麻煩一點。至少得寫個棧吧(當然c++有stl )。另外就是得自己判斷什麼時候出棧什麼時候入棧。增大了出錯的可能。
當然手寫棧實現遞迴也是有好處的。那就是函式呼叫開銷比直接執行語句大。另外就是棧空間是有上限的。比如。
void dfs(int n){
if(n > 1) dfs(n-1);
當n很大時,就會爆棧出錯。而手寫棧,棧通常可用結構體陣列來模擬實現。將陣列開成全域性變數,能承擔的上限比遞迴呼叫的要大。
通常情況下,直接遞迴呼叫就夠了。
2樓:魚兒怕魚鉤
棧是遍歷樹的一種方法。
用佇列遍歷也可以。
用棧是dfs,用佇列是bfs
用資料結構的棧解決八皇后問題
3樓:
**如下:
#include
int v,i,j,k,l,s,a[99];
main()
我保證這段**能執行。但可能有時會編譯出錯,關閉編譯器重新編譯就行了。
執行時輸入 8(即皇后數量) 按回車。
你如果想知道這**是怎麼編的,請你請教高人吧。
這段**是1991年國際模糊c**大賽的「最佳小程式」
八皇后問題,資料結構(c語言版)
4樓:網友
樓下的**有點問題啊,是這樣的,剛測試除錯通過過如還有問題q我523117894
#include
enum boolean ;
enum boolean a[9] ,b[17] ,c[17] ;//檢查皇后之間是否衝突。
int s[9];
void main()
elsefor(i=1;i<=8;i++)
printf("");}
5樓:史朝東樂安
**如下,有問題hi我。
#include
enumboolean;
enumbooleana[9],b[17],c[17];//檢查皇后之間是否衝突。
ints[9];
voidmain()
elsefor(i=1;i<=8;i++)
printf("");}
c++用棧結構實現八皇后問題
6樓:
不一樣;data[i]應該表示的是第i行的位置,和i的值不一定一樣;
加入兩個皇后在一條斜線上,比如(i=1,data[i]=5)和(i=5,data[i]=1)或者(1,5)和(2,6),可以看出,當兩個位置的行(i)的差值等於縱座標(data[i])的差的絕對值時,兩個皇后是在一條直線上的。
7樓:網友
兩個皇后 行的差值和列的差值相等的時候就表示在乙個斜線上了。
這裡因為i肯定小於top所有沒有用絕對值。
8樓:無行雲
不一樣,data[i]是在i這個位置上的值,而i是指哪個位置。
審美究竟是理性的還是感性的
關於美麗的判斷本來就是感性的,每個人都有自己標準,審美觀那就必然也是感性的,每個人連美麗的定義都不一樣,那麼他們的審美觀要怎麼一樣呢?蘿蔔白菜各有所愛,你喜歡的你就認為美,但是對於我來說我喜歡的跟你截然相反啊,那麼我認為的美那就不是美了嗎?這樣的觀點未免太片面 太果斷 對於我來說,美是一個很抽象的詞...
熱火最大的對手究竟是雷霆還是步行者?
步行者,雷霆這樣小大的陣容,熱火是不會怕的。熱火怕的是有傳統中鋒的球隊,步行者外線有保羅喬治,內線有希伯特,一外一內。你看看上個賽季,熱火打步行者就被步行者的方式打得束手無措。熱火能贏,但很艱難。雷霆,很簡單的,因為就算熱火打敗了步行者,也還要再打敗雷霆 前提是雷霆打敗了西部所有強隊 才能拿到總冠軍...
我家的狗狗究竟是腸炎還是細小啊
狗狗得狗瘟一開始確實是測不出來,去測血液也許可以 這個我沒試過。網上有此說法 可以通過觀察一些症狀來判斷。狗狗得狗瘟初期會有偶爾的嘔吐。拉軟便或者拉稀便。流清水鼻涕。咳嗽。有的狗狗身上 包括耳朵裡面。眼簾。嘴唇周圍。肚皮。腿。背 會有紅點 有這種紅點抓癢比較少。跟蟎蟲的不一樣 最主要的是會發燒,你給...