回溯法 八皇后 堆疊實現的非遞迴版本

2021-04-02 01:09:57 字數 1296 閱讀 4818

[

回溯法

_八皇后

]堆疊實現的非遞迴版本

by emilmatthew

05/11/9

其實,

用遞迴或

while

迴圈實現

n皇后問題效果挺好的

(請參考

),而且思路也很清楚

,為什麼還要去多加乙個棧呢

?原因在於

,為了更好的訓練演算法及資料結構的應用

,達到融會貫通的目的

.做些遞迴與非遞迴程式間的轉換是起碼的要求

.(水平菜就得這樣來

)演算法陳述

:用乙個陣列

arr來表示皇后在行間或位置

depth

表示下一步探索的深度

stack

作為上層跳轉下來時上層位置的中間紀錄

.*size

表示問題的規模

.nqueensproblem stack version

壓首行首列元素0進棧

.depth置1

doelse if

這個位置有衝突並且

i已超出問題

規模else

當前位置沒有衝突}}

}下面給出演算法的

c程式實現

:void nqueensproblemstack(int size,file* outputfile)

else

else

else//no collide,branching to next level}}

}printf("/ndepth%d/n",depth);

if(flag==1)

printf("resolve successfully/n");

else

printf("no resolve/n");

}/*aid fun*/

int checkxiepos(int r1,int r2,int c1,int c2)

int checkvpos(int* arr,int len)

return flag;

}int partfinished(int* arr,int len)

out:

return flag;

}

回溯法 八皇后問題(非遞迴)

回溯法 試探法 八皇后問題 非遞迴 列印一組解 includeint col 8 int left 15 int right 15 int q 8 void queen void if j 8 int main else printf n return 0 n皇后問題 列印第一組解 include ...

回溯法 八皇后問題的遞迴與非遞迴演算法

八皇后的問題非常有名,初次理解可能稍有難度,不過多看書,看部落格和 幾遍下來,也基本清晰。首先不用想初始的情況,先假設前面已經排列好了幾個皇后,即將排列下乙個皇后。依次遍歷八個位置,然後與之前的進行判斷這個位置是否可行,如可行則進行下乙個皇后,否則則移動位置繼續判斷。很簡單。但是有兩個個問題 1 不...

八皇后問題 回溯 遞迴 回溯 非遞迴

八皇后問題 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。分析 我們可以嘗試在將第乙個皇后擺放在第0行第0列,為了不衝突,將第二個皇后擺放在第1行第3列 依次下去 然後發現第5行每個位置都有衝突,這說明上面4行肯定不能這麼擺放...