八皇后问题C++泛型算法实现
2014-08-21 15:15
260 查看
八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
八皇后问题本质上是排列问题。
具体分析[来自<剑指Offer>]:
“由于8个皇后的任意两个不能处在同一行,那么肯定是每一个皇后占据一行。于是定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行的皇后的列号。先把数组ColumnIndex的8个数字分别用0~7初始化,接下来就是对数组ColumnIndex做全排列。然后只需要分析每个排列对应的8个皇后是不是在同一对角线上,即是不是有i-j ==
ColumnIndex[i] - ColumnIndex[j]或j-i == ColumnIndex[i] - ColumnIndex[j]成立。”
而C++标准库算法bool next_permutation( BidirIt first, BidirIt last) 正好提供了对[first, last)元素的排序。该函数实现就地排列,如果还有下个排列,则将原序列改为下个排列,并返回true,表示排列成功。
利用标准库的算法,省去了许多的代码。
八皇后问题本质上是排列问题。
具体分析[来自<剑指Offer>]:
“由于8个皇后的任意两个不能处在同一行,那么肯定是每一个皇后占据一行。于是定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行的皇后的列号。先把数组ColumnIndex的8个数字分别用0~7初始化,接下来就是对数组ColumnIndex做全排列。然后只需要分析每个排列对应的8个皇后是不是在同一对角线上,即是不是有i-j ==
ColumnIndex[i] - ColumnIndex[j]或j-i == ColumnIndex[i] - ColumnIndex[j]成立。”
而C++标准库算法bool next_permutation( BidirIt first, BidirIt last) 正好提供了对[first, last)元素的排序。该函数实现就地排列,如果还有下个排列,则将原序列改为下个排列,并返回true,表示排列成功。
利用标准库的算法,省去了许多的代码。
相关文章推荐
- 八皇后问题,C++实现
- 全排列算法递归及STL实现,八皇后问题
- 【高级算法】Lasvegas算法解决3SAT问题(C++实现代码)
- 【高级算法】模拟退火算法解决3SAT问题(C++实现)
- 【高级算法】遗传算法解决3SAT问题(C++实现)
- c++实现回溯算法解决图的M着色问题
- C++实现算法导论十五章动态规划之钢条分割问题
- 【高级算法】Lasvegas+回溯算法解决3SAT问题(C++实现)
- 经典算法---8皇后问题的C++实现
- C++实现&nbsp;贪心算法-区间覆盖问题
- [C++]数据结构:算法分析之八皇后问题
- 第 1 章 第 1 题 高级语言的排序问题 C++标准算法实现
- c++ 泛型算法 numeric方法实现原型
- 【高级算法】单纯形法求解线性规划问题(C++实现)
- 八皇后问题求解----C++实现
- C++实现八皇后问题
- 算法导论 第16章 贪心算法-活动选择问题C++实现
- 整数取反问题的算法实现(C/C++实现,极简5行代码)
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- 八皇后问题 java实现,算法两则