C語言回溯法解八皇后問題 八皇后演算法

2022-09-21 21:30:24 字數 1030 閱讀 8775

在乙個西洋棋棋盤上放置八個皇后,使得任何兩個皇后之間不相互攻擊,求出所有的布棋方法,並推廣到n皇后情況。

啥文字都不用看,b站上有個非常詳細的動畫**解說,上鏈結!!!

click here!

#include

#include

#include

using namespace std;

void put_queen(int x, int y, vector>&attack)

; static const int dy = ;

attack[x][y] = 1;//將皇后位置標記為1

//通過兩層for迴圈,將該皇后可能攻擊到的位置標記

for (int i = 1; i < attack.size(); i++)//從皇后位置向1到n-1個距離延伸 }

}//回溯演算法

//k表示當前處理的行

//n表示n皇后問題

//queen儲存皇后的位置

//attack標記皇后的攻擊範圍

//solve儲存n皇后的全部解法

void backtrack(int k, int n, vector& queen,

vector>& attack,

vector>& solve)

//遍歷0至n-1列,在迴圈中,回溯試探皇后可放置的位置

for (int i = 0; i < n; i++) }

}vector>solvenqueens(int n)

queen.push_back("");

queen[i].append(n, '.');

} backtrack(0, n, queen, attack, solve);

return solve;//返回結果陣列

}int main()

cout << endl;

} system("pause");

return 0;

}四皇后

八皇后本文標題: c語言回溯法解八皇后問題(八皇后演算法)

本文位址:

八皇后問題(回溯法)

問題描述 八皇后問題是十九世紀著名數學家高斯於1850年提出的。問題是 在8 8的棋盤上擺放8個皇后,使其不能互相攻擊,即任意的兩個皇后不能處在同意行,同一列,或同意斜線上。可以把八皇后問題拓展為n皇后問題,即在n n的棋盤上擺放n個皇后,使其任意兩個皇后都不能處於同一行 同一列或同一斜線上。問題分...

回溯法 八皇后問題

八皇后問題是高斯於1850年提出的,這是乙個典型的回溯演算法的問題。八皇后問題的大意如下 西洋棋的棋盤有8 行 8 列共64個單元格,在棋盤上擺放八個皇后,使其不能互相攻擊,也就 是說任意兩個皇后都不能處於同一行 同一列或同一斜線上。問總共有多少種擺放方法,每一種擺 放方式是怎樣的。首先來分析八皇后...

八皇后問題 回溯法

在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法 就拿四皇后來說吧 我們首先需要建立乙個一維陣列 這個陣列裡存放的就是皇后在該列合適的位置 這個陣列存放的是皇后放的行數,我們首先在第一列中找乙個可以放的地方,很明顯第乙個位置就可以...