八皇后代碼

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


發佈了47 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章