八皇后問題,C語言實現,求出第一行第一列有皇后的解

題目如圖所示:
這裏寫圖片描述

#include<iostream>
#include<cmath>
#define N 8
using namespace std;

static int position[N];
static int chessboard[N][N];

void out_put_01()
{
    int i;
    cout<<"{ ";
    for(i=0; i<N; ++i)
    {
        if(i == N-1)
            cout<<(position[i]+1);
        else
            cout<<(position[i]+1)<<", ";
    }
    cout<<" }"<<endl;
}

void eigth_queen(int n)
{
    int i, j, flag;
    //當position[N]都放滿了,說明找到八皇后的解
    if(n==N)
    {
        //只輸出第一行第一列有皇后的解
        if(position[0] == 0)
            out_put_01();
        return;
    }
    for(i=0; i<N; ++i)
    {
        //position[n]存放的是第n行的第i個位置,即在第n行i列放置皇后
        position[n]=i;
        flag=1;
        for(j=0; j<n; ++j)
        {
            //第n行與前j行是否同列或正反斜線上
            if(position[n]==position[j] || abs(position[n]-position[j]) == (n-j))
                flag=0;
        }
        //若這一行(即第n行沒有衝突),則遞歸向下一行尋找皇后要放置的位置
        if(flag)
            eigth_queen(n+1);
    }

}

int main()
{
    eigth_queen(0);
    return 0;
}

運行結果:
這裏寫圖片描述

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