1. 程式人生 > >回溯算法(八皇後問題)

回溯算法(八皇後問題)

names .cn htm 回溯法 href total else std https

八皇後問題

在國際象棋中,皇後是最強大的一枚棋子,可以吃掉與其在同一行、列和斜線的敵方棋子。
將八個皇後擺在一張8*8的國際象棋棋盤上,使每個皇後都無法吃掉別的皇後,一共有多少種擺法?

程序實現

程序摘自回溯法與八皇後問題

#include<iostream>
#include<math.h>
using namespace std;

int n=8;
int total=0;
int *c=new int(n);                    //下標為行數,存的數為列數

bool is_ok(int row){
    for(int j=0;j!=row;j++){    
        if(c[row]==c[j] ||              //檢測是否在同一列          
            row-c[row]==j-c[j] ||    //檢測是否在同一”\“斜線上
            row+c[row]==j+c[j])    //檢測是否在同一"/"斜線上
            return false;
    }
    return true;
}

void queen(int row){
    if(row==n)
        total++;
    else
        for(int col=0;col!=n;col++){
            c[row]=col;
            if(is_ok(row))
                queen(row+1);
        }       
}

int main(){
    queen(0);
    cout<<total;
    return 1;
}

回溯算法(八皇後問題)