您的位置:首页 > 其它

趣味算法-八皇后

2012-02-26 22:29 260 查看
趣味编程-八皇后:

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

计算有多少种摆放方法。

采用递归尝试的方法:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: