八皇后 C程序 递归算法 看不懂
八皇后问题,小弟菜鸟一个,看不懂,求高手#include <stdio.h>
#define ROW 8
#define COL 8
#define NUM 8
int a[ROW][COL];
int k = 0;
int put( int n)
{ int i, j; if( n > NUM)
{
printf( "----------%06d----------\n", ++k);
for( i = 0; i < ROW; i ++)
{
for( j = 0; j < COL; j ++)
printf( "%c ", a[i][j] == 1 ? 'o' : 'x');
printf( "\n"); }
printf( "--------------------------\n\n"); return -1; }
// 尝试行中的每个位置
for( j = 0; j < COL; j ++)
{
int flag = 0;
for( i = 0; i < n - 1; i ++)
{
// 是否同列
if( a[i][j] == 1)
{
flag = 1;
break;
}
// 是否左斜角
if( j - ( n - 1 - i) >= 0 && a[i][j - ( n - 1 - i)] == 1)
{
flag = 1;
break;
}
// 是否右斜角
if( j + ( n - 1 - i) < COL && a[i][j + ( n - 1 - i)] == 1)
{
flag = 1;
break;
}
}
if( flag == 0)
{
a[n-1][j] = 1; if( put( n + 1) == -1)
{
a[n-1][j] = 0;
}else
return 0;
}
}
return -1;
}
int main()
{
put( 1);
return 0;
}