【八皇后】問題

算法

回溯的思想

代碼

來源於《算法競賽入門經典》
#include<iostream>
using namespace std;

int n, tot = 0, c[20];
void search(int cur){
    if (cur>n)tot++;//遞歸邊界,只要走到這裏,所有皇后必然不衝突
    else for (int i = 1; i <= n; i++){
        int ok = 1;
        c[cur] = i;//嘗試把第cur行的皇后放在第i列
        for (int j = 1; j < cur; j++)//檢查是否和前面的皇后衝突
        if (c[cur] == c[j] || cur - c[cur] == j - c[j]
            || cur + c[cur] == j + c[j]){
            ok = 0;
            break;
        }
        if (ok)search(cur + 1);//如果合法,則繼續遞歸
    }
}
int main(){
    cin >> n;
    search(1);
    cout << tot << endl;
    return 0;
}

發佈了37 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章