趣味算法-八皇后

趣味编程-八皇后:

在国际象棋棋盘上在每一行都要摆一个后,两个后不能在同一行,同一列,同一个斜线上出现。

计算有多少种摆放方法。

采用递归尝试的方法:

1) 在棋盘上摆放一个皇后;

2) 看皇后是否满足要求;

3) 如果满足则尝试下一行,不满足则回退到上一步。


代码点:

1) 用 int [8] 表示列,用数组的值表示皇后在该列的行的位置。

2) 用(abs(board[nPos]-board[j])==(nPos-j) 来计算两个皇后是否在同一斜线上。


#include <stdio.h>
#include <math.h>

int nCount = 0;
int board[8]={-1,-1,-1,-1,-1,-1,-1,-1};

void eight_queen(int nPos)
{
    int i = 0;
    int j = 0;
    int nRes = 0;

    if (nPos == 8)
    {
        nCount++;
        return;
    }

    for (i = 1; i <= 8; i++)
    {
        board[nPos]=i;
        nRes = 1;
   
        for (j = 0; j < nPos; j++)
        {
            if (board[nPos] == board[j])
            {
                nRes = 0;
            }
            else if (abs(board[nPos]-board[j])==(nPos-j))
            {
                nRes = 0;
            }
        }
        if (nRes == 1)
            eight_queen(nPos + 1);
    }
}

int main()
{
    eight_queen(0);
    printf("Result=%d\n", nCount);
    return 0;
}





你可能感兴趣的:(编程,算法)