趣味算法-八皇后
2012-02-26 22:29
260 查看
趣味编程-八皇后:
在国际象棋棋盘上在每一行都要摆一个后,两个后不能在同一行,同一列,同一个斜线上出现。
计算有多少种摆放方法。
采用递归尝试的方法:
1) 在棋盘上摆放一个皇后;
2) 看皇后是否满足要求;
3) 如果满足则尝试下一行,不满足则回退到上一步。
代码点:
1) 用 int [8] 表示列,用数组的值表示皇后在该列的行的位置。
2) 用(abs(board[nPos]-board[j])==(nPos-j) 来计算两个皇后是否在同一斜线上。
在国际象棋棋盘上在每一行都要摆一个后,两个后不能在同一行,同一列,同一个斜线上出现。
计算有多少种摆放方法。
采用递归尝试的方法:
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; }
相关文章推荐
- 趣味算法-自守数
- 趣味算法-青蛙过河
- 八皇后(N皇后)问题算法程序(回溯法)
- [经典算法] 八皇后
- Python学习二(生成器和八皇后算法)
- 趣味算法:国王和100个囚犯(据说是腾讯的面试题)
- 【经典趣味算法】常胜将军算法
- 回溯算法思想与八皇后问题解的个数
- 算法——八皇后
- 趣味算法:猴子搬香蕉问题
- 八皇后问题的回溯算法
- 笔试算法题(01):字符串倒置 & 八皇后问题
- Java基于循环递归回溯实现八皇后问题算法示例
- 算法训练 Hankson的趣味题
- [算法设计与分析]3.2.5构造趣味矩阵(规律阵+螺旋阵+魔方阵)
- 趣味算法:国王和100个囚犯
- 趣味算法:猴子搬香蕉问题
- 每天刷个算法题20160519:回溯法解八皇后
- 算法设计:经典八皇后问题之解决方案
- 【算法】用Lua解决八皇后的问题