八皇后問題(簡單回溯)

2021-07-09 07:02:35 字數 1108 閱讀 4883

隨心而記,以供追憶

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

2,解決方式:由於本問題只有八皇后擺放,故可以使用窮舉的思想,一一判斷,此次採用回溯演算法解決,且使用c++完成。

3,問題分析:

單元格內思想如下圖所示

回溯思想如下圖所示

以下為回溯演算法**(根據需求,故可不對皇后擺放的各種樣式都儲存進入本地,只使用乙個8*8的二維陣列進行操作)

void queen(int i)

}

以下為全部**:

#include "stdafx.h"

#include

#define n 8

using

namespace

std;

bool judgement(int queen[n], int i, int j);

void display(int queen[n]);

void queen(int m);

int q[n][n] = ;

int cout_num = 0;

int main()

void queen(int i)

}void display(int queen[n])

cout

<< endl;

}bool judgement(int queen[n], int i, int j)}}

return

true;

}

圖為執行後的顯示結果:

回溯 八皇后問題

八皇后問題 國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。分析 八皇后問題是回溯演算法的典型案例。我想我們在自己做的過程中,是這樣的 是先從 0,0 這個座標開始排放皇后,然後 1...

八皇后問題 回溯

在劉汝佳老師的書中對於8皇后問題的分析 我感覺非常經典 8皇后問題可行的解 92個 一共有3種思考的出發點 從64個格仔中選乙個子集,使得 子集中恰好有8個格仔,且任意兩個選出的格仔都不在同一行,同一列或同一對角線上 這正是子集的列舉問題。然而,64個格仔的子集有264個,太大了,這並不是乙個很好的...

八皇后問題(回溯)

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。可設定乙個陣列a i j,代表第i行第j列放置棋子。先按行從上往下的順序,每遞迴一次,在每一行的某一列放乙個棋...