八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯2023年提出:在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。今天聽陳星火老師(火爺)的講座提到了八皇后問題,正好今天沒寫的,於是晚上上完課回來就寫了一段回溯遞迴解決八皇后問題的**,當然也可以解決n皇后問題。執行後得到解為92組。
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
60
/* code by slyar */#include
#include
#define max 8
int queen[max]
, sum=0;
/* max為棋盤最大座標 */
void show(
)/* 輸出所有皇后的座標 */
printf
("/n");
sum++;
}int check(
int n)
/* 檢查當前列能否放置皇后 */
}return0;
}void put(
int n)
/* 回溯嘗試皇后位置,n為橫座標 */
else}}
}int main(
)
P1219 八皇后 C語言版 DFS 回溯
檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...
C語言回溯法遞迴求解八皇后問題
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 輸出8皇后問題所有結果。輸入 沒有輸入。輸出 每個結果第一行是no n 的形式,n表示輸出的是第幾個結果 下面8行,每行8個字元,a 表示皇后,表示空格。不同的結果中,先輸出第乙個皇后位置靠前的結果 第乙個皇后位置相同,先輸出...
八皇后問題C語言解法(遞迴 回溯)
本演算法是經過學習b站up主講解後,整理出來的 編譯無誤,可生成92種方式。include stdafx.h include stdlib.h int place 8 用來記錄當前行的皇后在第幾列 bool flag 8 那一列有皇后占領 bool d1 15 上對角線是否占領 bool d2 15...