八皇后問題(算法)C++源代碼

//八皇后問題,採用深度優先的算法 時間 2014-3-24
#include
using namespace std;

int num; //八皇后解的個數
int n;    //判斷宮格大小
char p;//控制是否輸出所有結果


int mg[100][100];
typedef struct        //堆棧中存放皇后所在位置的結構
{
    int x;
    int y;
}Point;
typedef struct        //定義堆棧,存放皇后數據
{
    Point data[50];
    int top;
}Que;
//judge()功能:判斷所放皇后的位置是否合理。合理返回值爲true,否則爲false
//judge()算法:通過所在點的位置分別從該列,該左上斜線,該右上斜線
//                 找出是否存在皇后,並判斷合理性
bool judge(int x,int y)  
{
    int i,j;
    j=y;
    for(i=0;i
    {
        if(i==x)
            continue;
        if(mg[i][j]==1)
            return false;
    }
    i=x,j=y;
    while(i!=0&&j!=0)
    {
        i--;j--;
        if(mg[i][j]==1)
            return false;
    }
    i=x;j=y;
    while(i!=0&&j!=n-1)
    {
        i--;j++;
        if(mg[i][j]==1)
            return false;
    }
    return true;
}
//print()功能:輸出解的個數。
void print(Que &Q)
{
    cout<<"解的個數爲:";
    cout<<num<<endl;
    system("pause");
}
//輸出所有的解
void print2()
{
    int i,j;
    for(i=0;i
    {
        for(j=0;j
        {
            cout<<mg[i][j]<<" ";
        }
        cout<<endl;
    }
}
//Pro()功能:判斷合理皇后的位置並存入堆棧,如果問題無解返回值爲false,否則爲true
//Pro()算法:
//    1.從方格(0,0)位置開始放入皇后
//    2.增加行數比如從(1,0)放入皇后,如果合理增加行數,否則增加列數
//    3.如果列數一直到宮格最後一列也不合理,返回上一行,對上一行皇后列數加1,重複步驟2,3
//    4.如果在最後一行找到合理皇后的位置,程序有解,num+1,重複步驟3。
bool Pro()
{
    Que Huang;
    Huang.top=-1;
    bool find;
    find=false;
    int i=1,j,k=0;
    Huang.top++;   //將(0,0)放入皇后並壓入堆棧
    Huang.data[0].x=1;
    Huang.data[0].y=1;
    mg[0][0]=1;
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章