关于八皇后问题,看不懂
代码如下:#include <stdio.h>
#define N 8
void Output(int bc[][N],int *count)
{
int i;
int j;
*count=*count+1;
printf("第%d种:\n",*count);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(bc[i][j])
printf("Q");/*在皇后位置打印Q*/
else
printf("0");/*在非皇后位置打印0*/
}
printf("\n\r");
}
system("Pause");/*暂停*/
}
void Queen(int board[][N],int row,int *count)
{
int OK;
int j ;
int i ;
if(row==N)
{
Output(board,count); /*找齐八后,则输出*/
return;
}
for(j=0;j<N;j++)
{
OK=1;
for(i=0;i<row;i++)
{
if((board[i][j])||(j-row+i>=0&&board[i][j-row+i])||(j-i+row<N&&board[i][j-i+row]))
{ /*判断位置*/
OK=0;
break;
}
}
if(OK)
{ /*找到则置标志,并在此基础上继续查找下一个皇后*/
board[row][j]=1;
Queen(board,row+1,count);/*继续递归*/
board[row][j]=0;
}
}
}
void main()
{
int pad[N][N];
int count=0;
int i ,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
pad[i][j]=0;/*将棋牌中所有位置置为0进行初始化*/
}
}
Queen(pad,0,&count);/*开始递归过程,对各种方案检查*/
printf("共有%d种方案",count);
}
函数Queen部分,怎么看都不明白,请帮忙解释下;还有,"board[row][j]=0"这句什么时候执行,有什么作用?Queen函数什么时候结束,在哪句执行完结束?
谢谢大家!