AC之回溯演算法UVA167

2021-07-29 12:24:01 字數 1007 閱讀 4497

經典的八皇后問題,此題要求和。

用的c++

c,d陣列判斷對角線,a[0]判斷此列是否有皇后,只有滿足三個條件才能算找到,a[0]判斷此行皇后在哪

核心**中

分別判斷1.如果沒找到(y==9)回溯;2.在最後一行找到了,儲存記錄資料,回溯;3.普通找到,繼續執行

缺點就是作為萌新**冗雜。。。

#include

#include

using namespace std;

int queen(int b[10])       

;int a[10][10]=;

int c[16]=,d[16]=;

int t=0,x,y;

for(x=1;x<=8;x++)

】         for(y=a[x][0]+1;y<=9;y++)

【if(a[1][0]==8)

}】if(y==9)

if(a[0][y]==0&&c[x+y]==0&&d[x-y+8]==0&&x==8)

if(a[0][y]==0&&c[x+y]==0&&d[x-y+8]==0&&x!=8)}}

int i2,max1=0;

for(i2=0; i2<=91; i2++)

return max1;

}int main()

{int k,i,i2;

cin>>k;

for(i=0; i>b[i1][j1];

max1=queen(b);

cout《這道題卡了好幾天,最後人工檢查debug也是差點讓橡皮擦破了草稿紙。。。

感悟:1.二維陣列傳進函式需要[確定是幾位];

2.不加第10行的那個if會造成崩潰,容我再想想為啥。。。

3.到第八行找到的時候新sum為了回溯要減去原sum第八行和第七行。。。

4.回溯的時候居然還x++,我還要x--兩遍(sad),同學說用while不用for會好一些。。。

5.改進了2的問題,刪除了/**/的**,加入了【】的兩處**

UVA 167 蘇丹的繼承者

是時候對於dfs搜尋做乙個簡單的小結了 八皇后問題 解法一 include include include include include include include include include include include include include include include ...

演算法高階之回溯演算法

1 什麼是回溯法 回溯法實際是窮舉演算法,按問題某種變化趨勢窮舉下去,如某狀態的變化用完還沒有得到最優解,則返回上一種狀態繼續窮舉。回溯法有 通用的解題法 之稱,其採用了一種 走不通就掉頭 思想作為其控制結構,用它可以求出問題的所有解和任意解。它的應用很廣泛,很多演算法都用到回溯法,例如,迷宮,八皇...

演算法之回溯思想

回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,...