题目描述:
我们对八皇后问题进行扩展。
国际象棋中的皇后非常神勇,一个皇后可以控制横、竖、斜线等4个方向(或者说是8个方向),只要有棋子落入她的势力范围,则必死无疑,所以对方的每个棋子都要小心地躲开皇后的势力范围,选择一个合适的位置放置。如果在棋盘上有两个皇后,则新皇后控制的势力范围与第一个皇后控制的势力范围可以进行叠加,这样随着皇后数量的增加,皇后们控制的范围越来越大,直至控制了棋盘中全部的格子。
现在我们关心的是,如果在 NN 的棋盘上放入 M 个皇后(M个皇后相互之间不能冲突)控制棋盘中的格子,则共有多少种不同的放置方法?
输入:N (N
输出:如果将 M 个皇服务器托管网后放入 NN 的棋盘中可以控制全部棋盘中的格子,则不同的放置方法的数量
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 2 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
C++代码
#include
#include
using namespace std;
int totalSolutions = 0; // 用于记录不同的放置方法的数量
// 检查当前位置是否安全
bool isSafe(int row, int col, const vector& board, int N) {
// 检查列
for (int i = 0; i = 0 && j >= 0; --i, --j) {
if (board[i][j] == 'Q') {
return false;
}
}
// 检查右上对角线
for (int i = row, j = col; i >= 0 && j & board, int N) {
for (int i = 0; i = 0 && l >= 0; --k, --l) {
if (board[k][l] == 'Q') {
controlled = true;
break;
}
}
// 检查右上对角线
for (int k = i, l = j; k >= 0 && l = 0; ++k, --l) {
if (board[k][l] == 'Q') {
controlled = true;
break;
}
}
// 检查右下对角线
for (int k = i, l = j; k & board) {
if (row == N) {
if (M == 0 && checkControl(board, N)) {
totalSolutions++; // 找到一个解决方案
}
return;
}
// 尝试在当前行的每一列放置皇后
for (int i = 0; i board(N, string(N, '.'));
solveNQueensUtil(0, N, M, board);
return 服务器托管网totalSolutions;
}
int main() {
int N, M;
cin >> N >> M;
cout
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
下文,小编将与大家一同探究同城外卖跑腿小程序的开发实战,包括但不限于技术选型、开发流程、用户体验等多个方面。 1.技术选型 在同城外卖跑腿小程序的开发中,技术选型是至关重要的一环。对于前端,选择了使用Vue.js框架,其灵活性和生态系统的支持使得开发过程更加高…