八皇后代码求大神注释一下。。八百里加急。。。
八皇后问题【问题描述】:设计一个求解八皇后问题的演示程序。八皇后问题如下:在8*8
的国际象棋棋盘上放置了八个皇后,要求没有一个皇后能吃掉另一个皇后,即任
意两个皇后都不处于棋盘的同一行、同一列或同一对角线上。八皇后问题布局图
之一如下图所示:
【基本要求】:编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一个初始位
置,输出八皇后问题的一个布局。
#include<iostream>
using namespace std;
int line[8];
int temp[92][8];
static count=0;
//------------------------------------
void show()
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(line[i]==j)
temp[count][i]=j;//用于存储各个完整的图
}
}
count++;
}
//-----------------------------
//判断摆放的位置是否正确,不正确返回1,正确返回0.
int Judge(int t)
{
int i,n=0;
for(i=0;i<t;i++)
{
if(line[i]==line[t])
{n=1;break;}
if(line[i]+i==line[t]+t)
{n=1;break;}
if(line[i]-i==line[t]-t)
{n=1;break;}
}
return n;
}
//-------------------------------------
//主要控制函数.
void control(int n)
{
int t=8;
for(line[n]=0;line[n]<t;line[n]++)
{
if(Judge(n))
continue;
else
if(n!=7)
control(n+1);
else
show();
}
}
//-------------------------------------
void main()//主函数.
{
int x,y;
control(0);
cout<<"输入起始行:";
cin>>x;
cout<<"输入起始列:";
cin>>y;
for(int i=0;i<92;i++)
{
if(temp[i][x-1]==y-1)
{
for(int m=0;m<8;m++)
{
for(int n=0;n<8;n++)
{
if(n==temp[i][m])
cout<<"Q ";
else
cout<<"* ";
}
cout<<endl;
}
cout<<endl;
}
}
}