八皇后问题—c语言实现

八皇后问题—c语言实现


八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。来自Wikipedia。

采用的思想是递归。

主要实现几个函数:

void print_board():能够打印棋盘上皇后的位置。

int conflicts( int row, int column ):检查一个位置是否冲突。

void place_queen( int row ):放置皇后,由于采用递归,所以一行放置就行。

实现代码:

/*
** Solve the Eight Queens Problem.
*/
#include
#include 
#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 )
{
    int column;

    for(column = 0; column < 8; column++) {
        board[row][column] = TRUE;
        if( row == 0 || !conflicts(row, column)) {
            if( row < 7 )
                place_queen(row + 1);
            else
                print_board();
        }
        board[row][column] = FALSE;
    }
}

int main(int argc, char const *argv[])
{
    place_queen(0);
    return 0;
}


讲解:

conflicts函数检测的时候可以省略,就像上面的代码一样,因为棋盘下面的还没有放置。

place_queen:我们现在第一行进行放置,将一个地方置为TRUE,用if检测是否冲突,不冲突并且还没填满,那就递归进入下一行填充(假设进入下一行填充失败,那么就将置为TRUE的改成FALSE)。当检测到row == 7时,也就意味着填满了,就将棋盘打印出来。

这能将所有解法都找到。


结果:

Solution #1:
 Q + + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + + + + + Q + +
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + Q + + + +

Solution #2:
 Q + + + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + Q + + + + +
 + + + + + + Q +
 + + + Q + + + +
 + Q + + + + + +
 + + + + Q + + +

Solution #3:
 Q + + + + + + +
 + + + + + + Q +
 + + + Q + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + Q + + +
 + + Q + + + + +

Solution #4:
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +
 + + + + + Q + +
 + + Q + + + + +

Solution #5:
 + Q + + + + + +
 + + + Q + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +

Solution #6:
 + Q + + + + + +
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + + Q + + + +

Solution #7:
 + Q + + + + + +
 + + + + Q + + +
 + + + + + + Q +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + Q + + + + +

Solution #8:
 + Q + + + + + +
 + + + + + Q + +
 Q + + + + + + +
 + + + + + + Q +
 + + + Q + + + +
 + + + + + + + Q
 + + Q + + + + +
 + + + + Q + + +

Solution #9:
 + Q + + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + Q + + + + +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + Q +
 + + + + Q + + +

Solution #10:
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + + + Q + + +
 Q + + + + + + +
 + + + Q + + + +

Solution #11:
 + Q + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + Q + + + +
 + + + + + Q + +
 + + Q + + + + +

Solution #12:
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + Q +
 + + + Q + + + +

Solution #13:
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +
 + + + + + Q + +

Solution #14:
 + + Q + + + + +
 + + + + Q + + +
 + Q + + + + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + + + + Q +
 + + + Q + + + +
 + + + + + Q + +

Solution #15:
 + + Q + + + + +
 + + + + Q + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + + Q + + + +
 + + + + + + Q +
 Q + + + + + + +

Solution #16:
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +

Solution #17:
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +

Solution #18:
 + + Q + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + + + + Q +
 + + + Q + + + +

Solution #19:
 + + Q + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + + Q
 + + + + Q + + +

Solution #20:
 + + Q + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + Q + + + +

Solution #21:
 + + Q + + + + +
 + + + + + Q + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + + + + + Q +
 + Q + + + + + +

Solution #22:
 + + Q + + + + +
 + + + + + Q + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +

Solution #23:
 + + Q + + + + +
 + + + + + Q + +
 + + + + + + + Q
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + Q +
 + + + + Q + + +
 + Q + + + + + +

Solution #24:
 + + Q + + + + +
 + + + + + Q + +
 + + + + + + + Q
 Q + + + + + + +
 + + + + Q + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + Q + + + +

Solution #25:
 + + Q + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +

Solution #26:
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + Q + +

Solution #27:
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + Q + + +

Solution #28:
 + + Q + + + + +
 + + + + + + + Q
 + + + Q + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + Q + + +

Solution #29:
 + + + Q + + + +
 Q + + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + Q + +

Solution #30:
 + + + Q + + + +
 Q + + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + + + + + Q + +
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +

Solution #31:
 + + + Q + + + +
 + Q + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + + + + + Q + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + + Q +

Solution #32:
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + Q + +
 + + + + + + + Q
 Q + + + + + + +
 + + + + Q + + +

Solution #33:
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + + + Q + + +
 Q + + + + + + +

Solution #34:
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + Q + + + + +

Solution #35:
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + Q + +

Solution #36:
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + Q +

Solution #37:
 + + + Q + + + +
 + + + + + Q + +
 Q + + + + + + +
 + + + + Q + + +
 + Q + + + + + +
 + + + + + + + Q
 + + Q + + + + +
 + + + + + + Q +

Solution #38:
 + + + Q + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + Q + + +

Solution #39:
 + + + Q + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + Q + + + + + +

Solution #40:
 + + + Q + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + Q + + + + + +
 + + + + + Q + +
 + + Q + + + + +

Solution #41:
 + + + Q + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + Q + + +
 Q + + + + + + +
 + + + + + Q + +

Solution #42:
 + + + Q + + + +
 + + + + + + Q +
 + + + + Q + + +
 + Q + + + + + +
 + + + + + Q + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + + + Q

Solution #43:
 + + + Q + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +

Solution #44:
 + + + Q + + + +
 + + + + + + + Q
 Q + + + + + + +
 + + Q + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +
 + + + + Q + + +

Solution #45:
 + + + Q + + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + + Q + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +
 + + Q + + + + +

Solution #46:
 + + + Q + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +

Solution #47:
 + + + + Q + + +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +

Solution #48:
 + + + + Q + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + Q + +

Solution #49:
 + + + + Q + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + Q + + + +

Solution #50:
 + + + + Q + + +
 + Q + + + + + +
 + + + Q + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +

Solution #51:
 + + + + Q + + +
 + Q + + + + + +
 + + + Q + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + + + Q
 + + + + + Q + +
 Q + + + + + + +

Solution #52:
 + + + + Q + + +
 + Q + + + + + +
 + + + + + Q + +
 Q + + + + + + +
 + + + + + + Q +
 + + + Q + + + +
 + + + + + + + Q
 + + Q + + + + +

Solution #53:
 + + + + Q + + +
 + Q + + + + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + Q +
 + + Q + + + + +
 + + + + + Q + +

Solution #54:
 + + + + Q + + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +
 + + + + + + Q +

Solution #55:
 + + + + Q + + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + + Q + + + +

Solution #56:
 + + + + Q + + +
 + + Q + + + + +
 + + + + + + + Q
 + + + Q + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + + + Q + +
 + Q + + + + + +

Solution #57:
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + + Q + + + +
 + Q + + + + + +

Solution #58:
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + Q + + + + +

Solution #59:
 + + + + Q + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + Q + + + +
 + + + + + + + Q
 Q + + + + + + +
 + + Q + + + + +
 + + + + + Q + +

Solution #60:
 + + + + Q + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +
 + + Q + + + + +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + + Q

Solution #61:
 + + + + Q + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + Q + + + +

Solution #62:
 + + + + Q + + +
 + + + + + + Q +
 + + + Q + + + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + Q + + + + + +

Solution #63:
 + + + + Q + + +
 + + + + + + + Q
 + + + Q + + + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +

Solution #64:
 + + + + Q + + +
 + + + + + + + Q
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +
 + + Q + + + + +

Solution #65:
 + + + + + Q + +
 Q + + + + + + +
 + + + + Q + + +
 + Q + + + + + +
 + + + + + + + Q
 + + Q + + + + +
 + + + + + + Q +
 + + + Q + + + +

Solution #66:
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + + + Q + + + +

Solution #67:
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + Q + + + + +

Solution #68:
 + + + + + Q + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +

Solution #69:
 + + + + + Q + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + Q +
 + + + + Q + + +

Solution #70:
 + + + + + Q + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + Q + + + + + +
 + + + Q + + + +
 + + + + + + Q +

Solution #71:
 + + + + + Q + +
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q

Solution #72:
 + + + + + Q + +
 + + Q + + + + +
 + + + + Q + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + Q +

Solution #73:
 + + + + + Q + +
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + Q + + + +
 + + + + + + + Q
 Q + + + + + + +
 + + + + Q + + +

Solution #74:
 + + + + + Q + +
 + + Q + + + + +
 + + + + + + Q +
 + Q + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 Q + + + + + + +
 + + + Q + + + +

Solution #75:
 + + + + + Q + +
 + + Q + + + + +
 + + + + + + Q +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + Q + + +

Solution #76:
 + + + + + Q + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + + + Q +
 + + Q + + + + +

Solution #77:
 + + + + + Q + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +

Solution #78:
 + + + + + Q + +
 + + + Q + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + Q + + +
 + Q + + + + + +
 + + + + + + + Q

Solution #79:
 + + + + + Q + +
 + + + Q + + + +
 + + + + + + Q +
 Q + + + + + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + Q + + +
 + + Q + + + + +

Solution #80:
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + Q + + + + +

Solution #81:
 + + + + + + Q +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + + + Q
 + + + + + Q + +
 + + + Q + + + +
 + Q + + + + + +
 + + + + Q + + +

Solution #82:
 + + + + + + Q +
 + Q + + + + + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + + Q
 + + + + Q + + +
 + + Q + + + + +
 + + + + + Q + +

Solution #83:
 + + + + + + Q +
 + Q + + + + + +
 + + + + + Q + +
 + + Q + + + + +
 Q + + + + + + +
 + + + Q + + + +
 + + + + + + + Q
 + + + + Q + + +

Solution #84:
 + + + + + + Q +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + + + + Q + + +
 + Q + + + + + +
 + + + Q + + + +

Solution #85:
 + + + + + + Q +
 + + Q + + + + +
 + + + + + + + Q
 + Q + + + + + +
 + + + + Q + + +
 Q + + + + + + +
 + + + + + Q + +
 + + + Q + + + +

Solution #86:
 + + + + + + Q +
 + + + Q + + + +
 + Q + + + + + +
 + + + + Q + + +
 + + + + + + + Q
 Q + + + + + + +
 + + Q + + + + +
 + + + + + Q + +

Solution #87:
 + + + + + + Q +
 + + + Q + + + +
 + Q + + + + + +
 + + + + + + + Q
 + + + + + Q + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + Q + + +

Solution #88:
 + + + + + + Q +
 + + + + Q + + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + Q + +
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +

Solution #89:
 + + + + + + + Q
 + Q + + + + + +
 + + + Q + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 + + Q + + + + +
 + + + + + Q + +

Solution #90:
 + + + + + + + Q
 + Q + + + + + +
 + + + + Q + + +
 + + Q + + + + +
 Q + + + + + + +
 + + + + + + Q +
 + + + Q + + + +
 + + + + + Q + +

Solution #91:
 + + + + + + + Q
 + + Q + + + + +
 Q + + + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + Q + + +
 + + + + + + Q +
 + + + Q + + + +

Solution #92:
 + + + + + + + Q
 + + + Q + + + +
 Q + + + + + + +
 + + Q + + + + +
 + + + + + Q + +
 + Q + + + + + +
 + + + + + + Q +
 + + + + Q + + +
 

你可能感兴趣的:(c)