問題描述:
在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。輸入格式 輸入的第一行為乙個整...