不同行不同列最大值(計蒜客 dfs八皇后問題)

八皇后問題是個很經典的問題,與不同行不同列最大值解法有着異曲同工的地方,還是學一下比較好~~~
這裏面的數組大小是以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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章