#include <stdio.h>
#include <stdlib.h>
#define FALSE 0
#define TRUE 1
int flag = 0; //標誌:下次遞歸失敗與否;
int board[ 8 ][ 8 ];
void print_board()
{
int row;
int column;
static int n_solutions;
n_solutions += 1;
printf( "Solution #%d:\n", n_solutions );
for( row = 0; row < 8; row ++ )
{
for( column = 0; column < 8; column ++ )
{
if( board[ row ][ column ] )
printf( " Q");
else
printf( " +");
}
putchar( '\n');
}
putchar( '\n' );
}
int conflicts( int row, int column )
{
int i;
for( i = 0; i < 8; i++ )
{
if( row - i >= 0 && board[ row-i ][ column ] )
return TRUE;
if( column - i >= 0 && board [ row ][ column - i ])
return TRUE;
if( column + i < 8 && board [ row ][ column + i ] )
return TRUE;
if( row - i >= 0 && column - i >= 0
&& board[ row - i ][ column - i ] )
return TRUE;
if( row - i >= 0 && column + i < 8
&& board[ row - i ][ column + i ] )
return TRUE;
}
return FALSE;
}
void place_queen( int row )
{
int column;
for ( column = 0; column < 8; column++ )
{
if(!conflicts( row, column ) )
{
board[ row ][ column ] = TRUE;
if( row < 7 )
{
place_queen( row + 1 );
if( flag == 1)
{
board[ row ][ column ] = FALSE;
flag = 0;
continue;
}
}
else
{
print_board();
board[ row ][ column ] = FALSE;
}
}
}
flag = 1;
}
int main()
{
int i;
int j;
for( i = 0; i < 8; i++ )
for ( j = 0; j < 8; j++ )
board[ i ][ j ] = FALSE;
place_queen( 0 );
return 0;
}
八皇后代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.