八皇后的結構究竟是棧還是樹?

2025-02-08 18:29:34 字數 1941 閱讀 8282

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是指哪個位置。

審美究竟是理性的還是感性的

關於美麗的判斷本來就是感性的,每個人都有自己標準,審美觀那就必然也是感性的,每個人連美麗的定義都不一樣,那麼他們的審美觀要怎麼一樣呢?蘿蔔白菜各有所愛,你喜歡的你就認為美,但是對於我來說我喜歡的跟你截然相反啊,那麼我認為的美那就不是美了嗎?這樣的觀點未免太片面 太果斷 對於我來說,美是一個很抽象的詞...

熱火最大的對手究竟是雷霆還是步行者?

步行者,雷霆這樣小大的陣容,熱火是不會怕的。熱火怕的是有傳統中鋒的球隊,步行者外線有保羅喬治,內線有希伯特,一外一內。你看看上個賽季,熱火打步行者就被步行者的方式打得束手無措。熱火能贏,但很艱難。雷霆,很簡單的,因為就算熱火打敗了步行者,也還要再打敗雷霆 前提是雷霆打敗了西部所有強隊 才能拿到總冠軍...

我家的狗狗究竟是腸炎還是細小啊

狗狗得狗瘟一開始確實是測不出來,去測血液也許可以 這個我沒試過。網上有此說法 可以通過觀察一些症狀來判斷。狗狗得狗瘟初期會有偶爾的嘔吐。拉軟便或者拉稀便。流清水鼻涕。咳嗽。有的狗狗身上 包括耳朵裡面。眼簾。嘴唇周圍。肚皮。腿。背 會有紅點 有這種紅點抓癢比較少。跟蟎蟲的不一樣 最主要的是會發燒,你給...