在乙個西洋棋棋盤上放置八個皇后,使得任何兩個皇后之間不相互攻擊,求出所有的布棋方法,並推廣到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格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法 就拿四皇后來說吧 我們首先需要建立乙個一維陣列 這個陣列裡存放的就是皇后在該列合適的位置 這個陣列存放的是皇后放的行數,我們首先在第一列中找乙個可以放的地方,很明顯第乙個位置就可以...