2n皇后問題

2021-06-22 18:38:50 字數 1223 閱讀 9624

問題描述:

在n*n的矩陣中放入n個白皇后和n個黑皇后,該矩陣由元素0和1組成,0代表該位置不能放皇后,1代表可以放皇后,n個的皇后兩兩不能在同一行和同一列以及同一對  角線上,n個黑皇后兩兩不能在同一行和同一列以及同一對角線上。求最多有幾種放法?

解法:這個問題跟8皇的問題類似,只不過多了另外一種顏色的皇后。也就是說,假設我們在矩陣上放n個皇后有m種方法,那麼再次放皇后就有cm取2種方法。由此只需在8皇后問題的**做少些修改即可完成。以下是**,有詳細注釋:

#include #include #include using namespace std;

#define exchange(x, y) //交換兩個變數

const int n = 8;//最多輸入8個值

int index[n] = ;//下標陣列,是用下標進行排列

vectormethod;//存放可行的排列

void sort(int *p, int beg, int end)

void print()

void next_permutation(int* cur, int n)

for(i = n - 1; i > -1; i --) }

if(decindex == -1)//假設排列已到最後

return;

temp = cur[decindex];

for(i = decindex + 1; i < n; i++)

exchange(cur[decindex], cur[excindex]);

sort(cur, decindex + 1, n - 1);

//print();

}bool judge(int index, int n)

} return true;

}bool fill_queen(int *p, int n)

return true;

}int fatorial(int n)

int solve(int *p, int n)

vector::iterator it;

vector::iterator it2;

for(it = method.begin(); it != method.end() - 1;)

if(j == n)

count++;

} }return count;

}int main()

2n皇后問題

問題描述 給定乙個 n n 的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入 n 個黑皇后和 n 個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不 在同一行 同一列或同一條對角線上。問總共有多少種放法?n 小於等於 8。輸入格式 輸入的第一行為乙個整數 n...

2n皇后問題

基礎練習 2n皇后問題 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放...

2n皇后問題

基礎練習 2n皇后問題 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙個整...