經典的八皇后問題,此題要求和。
用的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 什麼是回溯法 回溯法實際是窮舉演算法,按問題某種變化趨勢窮舉下去,如某狀態的變化用完還沒有得到最優解,則返回上一種狀態繼續窮舉。回溯法有 通用的解題法 之稱,其採用了一種 走不通就掉頭 思想作為其控制結構,用它可以求出問題的所有解和任意解。它的應用很廣泛,很多演算法都用到回溯法,例如,迷宮,八皇...
演算法之回溯思想
回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,...