SRLK游戏
# include & ltstdlib.h & gt
void eightqueen(int a[][99],int n);
void print(int a[][99]);
int up(int a[][99],int row,int col);
int down(int a[][99],int row,int col);
int left(int a[][99],int row,int col);
int right(int a[][99],int row,int col);
int num = 0;
主()
{
int a[99][99]={0},n;//将皇后的位置放在二维数组中,其中a[i][j]=1表示有皇后。
eightqueen(a,0);
系统(“暂停”);
返回0;
}
Void print(int a[][99]) //输出一个合理的目前要走的路。
{
int i,row,col
printf("案例%d\n ",编号);
for(row = 0;row & lt8;row++)
{
for(col = 0;col & lt8;col++)
{
printf("%d ",a[row][col]);
}
printf(" \ n ");
}
printf(" \ n ");
}
Void八皇后(int a [] [99],int row)//通过回溯计算八皇后的移动。
{
int col,I;
for(col = 0;col & lt=7;col++)
{
//判断前方位置是否为合理位置。
if ((up(a,row,col)= = 0)& amp;& amp(down(a,row,col)= = 0)& amp;& amp(left(a,row,col)= = 0)& amp;& amp(right(a,row,col)==0)
{
a[row][col]= 1;//如果是,将当前位置设置为1(放一个皇后)。
If(row==7) //八个皇后都排好了,输出当前情况。
{
num++;
打印(一份);
}
其他
{
eightqueen(a,行+1);//将下一个皇后放在+1行。
}
a[行][列]= 0;
}
}
}
//判断同线是否有其他皇后。
int up(int a[][99],int row,int col)
{
int I;
for(I = 0;我& lt8;i++)
{
if(a[i][col]==1)
{
返回1;
}
}
返回0;
}
//判断同一条线上是否有其他皇后。
int down(int a[][99],int row,int col)
{
int I;
for(I = 0;我& lt8;i++)
{
if(a[row][i]==1)
{
返回1;
}
}
返回0;
}
//从左上到右下判断停靠线上是否有其他皇后。
int left(int a[][99],int row,int col)
{
int I;
for(I = 0;我& lt8;i++)
{
if(((row+I)& lt;8)& amp;& amp((col+I)& lt;8))
{
if(a[row+i][col+i]==1)
{
返回1;
}
}
if(((row-I)& gt;= 0)& amp;& amp((col-I)& gt;=0))
{
if(a[row-i][col-i]==1)
{
返回1;
}
}
}
返回0;
}
//从左下到右上判断停靠线上是否有其他皇后。
int right(int a[][99],int row,int col)
{
int I;
for(I = 0;我& lt8;i++)
{
if(((row+I)& lt;8)& amp;& amp((col-I)& gt;=0)) //
{
if(a[row+i][col-i]==1)
{
返回1;
}
}
if(((row-I)& gt;= 0)& amp;& amp((col+I)& lt;8)) //这里的判断有问题。
{
if(a[row-i][col+i]==1)
{
返回1;
}
}
}
返回0;
}