#include#include#include#define N 8int arr[N];void
queens(int *arr);int checkPosition(int *arr, int i);int main(){// 初始化数组 int i;
for(i = 0; i =...
分类:
其他好文 时间:
2014-06-04 17:29:19
阅读次数:
308
剑指offer上解决八皇后问题,没有用传统的递归或非递归回溯法,而是用了很巧妙的全排列法。
先说下八皇后问题:在8 X 8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处于同一行,同一列或者同意对角线上,求出所有符合条件的摆法。
全排列解决八皇后问题的思路如下:
由于8个皇后不能处在同一行,那么肯定每个皇后占据一行,这样可以定义一个数组A[8],数组中第i个数字,即A[i]表示位于第i行的皇后的列号。先把数组A[8]分别用0-7初始化,接下来对该数组做全排列,由于我们...
分类:
其他好文 时间:
2014-05-26 03:22:14
阅读次数:
223
import java.util.ArrayList;
import java.util.List;
class Test8Queens3 {
public static StringBuffer result = new StringBuffer();
public static List list = new ArrayList();
public static int...
分类:
其他好文 时间:
2014-05-16 02:53:39
阅读次数:
332
八皇后问题应该是回溯法的教学典范。在本科的时候,有一门课叫面向对象,最后的附录有这个问题的源代码,当时根本不懂编程,照抄下来,运行一下出了结果都很开心,哎。
皇后们的限制条件是不能同行同列,也不能同对角线。那么显然每一列上都要有一个皇后,只需要用一个一维数组记录皇后在每一行上的位置就可以了。算法的思想是:从第一行开始,尝试把皇后放到某一列上,可以用一个vis数组保存已经有皇后的列,当找到一个还没...
分类:
其他好文 时间:
2014-05-15 05:02:41
阅读次数:
261
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表...
分类:
其他好文 时间:
2014-05-10 00:07:23
阅读次数:
309
求两节点的最短通路,对于无权图,可以通过图的广度优先遍历求解。含权图一般通过Dijkstra算法求解。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Sho...
分类:
其他好文 时间:
2014-05-08 15:59:09
阅读次数:
352
题意:(八皇后问题的变形)给定8个皇后的位置,然后问最少要走几步使得每个皇后之间可以不相互攻击(不在同一行同一列同一斜线)。其中走的过程每步可以横着竖着斜着走多个格子。
解法:先枚举所有合法的八皇后局面(总共92种)。然后将给的点对合法八皇后局面进行匹配。dp[i][j]表示合法八皇后前i个点用掉给定八皇后集合的子集j所花费的最小步数。这里的匹配相当于两个集合各八个点,进行一一配对。原来...
分类:
其他好文 时间:
2014-05-08 11:13:51
阅读次数:
317
题目链接:278 - Chess
题意:求出四种棋子最多放几个
思路:车能放行列的较小值,王隔着放,皇后根据八皇后问题可知,也是放行列最小值。
关键在于马,之前做过一题类似的,马分一行,两行,和两行以上考虑,一行就能全放,两行就隔一个田字格放,三行以上就每个马隔一个位置放。
代码:
#include
#include
#include
using namespace std;
i...
分类:
其他好文 时间:
2014-04-29 13:45:20
阅读次数:
381