八皇后问题—c语言实现
八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。来自Wikipedia。
采用的思想是递归。
主要实现几个函数:
void print_board()
:能够打印棋盘上皇后的位置。
int conflicts( int row, int column )
:检查一个位置是否冲突。
void place_queen( int row )
:放置皇后,由于采用递归,所以一行放置就行。
实现代码:
/*
** Solve the Eight Queens Problem.
*/
#include<stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int board[8][8] = {
0 };
void print_board()
{
int row;
int column;
static int n_solutions; //calculate the solutions
n_solutions += 1;
printf( "Solution #%d:\n", n_solutions );
for( row = 0; row < 8; row += 1 ){
for( column = 0; column < 8; column += 1 ){
if( board[ row ][ column ] )
printf( " Q" );
else
printf( " +" );
}
putchar('\n');
}
putchar('\n');
}
int conflicts( int row, int column )
{
int i;
for( i = 1; i < 8; i++ ) {
//check up,left,right
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;
//check diagonals: up and left, up an right
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