#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;