八皇后問題 回溯遞迴 C語言版

2021-08-24 19:25:50 字數 992 閱讀 9609

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

今天聽陳星火老師(火爺)的講座提到了八皇后問題,正好今天沒寫的,於是晚上上完課回來就寫了一段回溯遞迴解決八皇后問題的**,當然也可以解決n皇后問題。執行後得到解為92組。

123

4567

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...