八皇后問題

題目大意:

經典的八皇后問題,即在一個8*8的棋盤上放8個皇后,使得這8個皇后無法互相攻擊( 任意2個皇后不能處於同一行,同一列或是對角線上),輸出所有可能的擺放情況。

基本思路:

用一維數組存儲,下標代表行,元素存儲列的編號,在編程時只需比較列以及對角線是否符合規則即可,判斷對角線是否符合規則時注意絕對值;下面是最簡單的遞歸算法;

代碼如下:

#include <iostream>
using namespace std;


int c[20],n=8,cnt=0;
void print()
{
    for(int i=0; i<n; ++i)
    {
        for(int j=0; j<n; ++j)
        {
            if(j == c[i]) cout<<"1 ";
            else cout<<"0 ";
        }
        cout<<endl;
    }
    cout<<endl;
}
void search(int r)
{
    if(r == n)
    {
        print();
        ++cnt;
        return;
    }
    for(int i=0; i<n; ++i)//循環這一點要掌握
    {
        c[r] = i;//放在循環裏保證第r+1個皇后嘗試每一種可能;
        int ok = 1;
        for(int j=0; j<r; ++j)//判斷跟之前的皇后是否有衝突;
            if(c[r]==c[j] || r-j==c[r]-c[j] || r-j==c[j]-c[r])
            {
                ok = 0;
                break;
            }
        if(ok) search(r+1);
    }
}
int main()
{
    search(0);
    cout<<cnt<<endl;
    return 0;
}


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