八皇后问题是个很经典的问题,与不同行不同列最大值解法有着异曲同工的地方,还是学一下比较好~~~
这里面的数组大小是以8*8的棋盘作为依据的,如果想做其他大小棋盘的问题,记得改一下程序内容~
#include<iostream>
#include <memory.h>
using namespace std;
int sum = 0, maxx = 0, ans = 0;
int mapss[8][8];
int marked[8][8];
bool a[9] = {0};//列占用
bool x1[9] = {0};//左下右上占用
bool y1[9] = {0};//左上右下占用
int anss[100][8];
int p[8];
void dfs(int deep, int sum){
if (deep >= 8) {
if (maxx < sum) {
maxx = sum;
}
return;
}
for (int i = 0; i < 8; i++) {
if (x1[deep + i] == false && y1[i - deep + 8] == false && a[i] == false) {
x1[deep + i] = true;
y1[i - deep + 8] = true;
a[i] = true;
sum += mapss[deep][i];
dfs(deep + 1, sum);
sum -= mapss[deep][i];
a[i] = false;
y1[i - deep + 8] = false;
x1[deep + i] = false;
}
}
}
int main()
{
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cin >> mapss[i][j];
}
}
dfs(0, 0);
cout << maxx;
}