八皇后代码

#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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值