遞迴法求解八皇后

2021-10-06 19:32:19 字數 1033 閱讀 3938

八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯2023年提出:在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線(對角線)上,問有多少種擺法。

主要思路:一行一行得擺放皇后,直到第7行(作為遞迴結束條件)。初始狀態從第0行開始擺放,利用遞迴(深度搜尋)去搜尋所有情況,最後求得解。

#includeusing namespace std;

int sum = 0;

/*一行一行擺放皇后, 利用深度搜尋(回溯發)列舉所有情況

*/int chess[8][8];

//判斷當前位置是否可以擺放

bool can_place(int row, int col)

} //豎方向

for(int i = 0;i < 8;i++)

} //左上斜方向

r = row;

c = col;

while(--r >= 0 && --c >= 0)

} //右下斜方向

r = row;

c = col;

while(++r < 8 && ++c < 8)

} //左下斜方向

r = row;

c = col;

while(++r <= 7 && --c >= 0)

} //右上斜方向

r = row;

c = col;

while(--r >= 0 && ++c <= 7)

} return true;

} void eight_queue(int row)

} return;

}else

}}

return;

}int main()

} eight_queue(0);

printf("%d\n", sum);

return 0;

}

八皇后問題之遞迴法求解

八皇后問題是十九世紀著名的數學家高斯於1850年提出 在8x8格的西洋棋 上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案,1854年在柏林 的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果,對於...

八皇后問題,遞迴法

include includeint count 0 成功的次數 判斷在對角線或者同行同列上是否有皇后 int notdanger int row,int j,int chess 8 同列 for int i 0 i 8 i 判斷左上方 for int i row,k j i 0 k 0 i k 判...

八皇后問題 遞迴求解

八皇后問題簡述 在西洋棋中,皇后是最厲害的 這也就是大概為什麼不要得罪女人的原因 她可以吃掉任意與其所在列和行,以及對角線上的棋子。所以在8x8的棋盤上,安放8個皇后,使得不會相互攻擊,也就是安全的就變得極為重要。本文採用遞迴的方式,輸出所有的92種可能的方法。如下 include stdafx.h...