写程序输出8皇后问题的所有排列,要求使用非递归的深度优先遍历。
2017-01-15 12:06
441 查看
#define COLS 10 #define WAYS 100 int col[COLS]; int result[WAYS][COLS]; bool isVaild(int level) { for (int i = 1; i < level; ++i) { if (col[i] == col[level] || abs(i - level) == abs(col[i] - col[level])) return false; } return true; } int eightQueen() { memset(col, 0, sizeof(int) * COLS); memset(result, 0, sizeof(int) * COLS * WAYS); int level = 1; col[level] = 0; int count = 0; while (level >= 1) { col[level]++; while (col[level] <= 8 && !isVaild(level)) { col[level]++; } if (col[level] <= 8) { if (level == 8) { for (int i = 1; i <= 8; ++i) { result[count][i] = col[i]; } count++; } else { level++; col[level] = 0; } } else { level--; } } return count; }
相关文章推荐
- 写程序输出8皇后问题的所有排列,要求使用非递归的深度优先遍历。
- 【算法面试】写程序输出8皇后问题的所有排列,要求使用非递归的深度优先遍历。
- 排列(permutation):用1,2,3,...,9组成3个三位数abc, def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。提示:不必太动脑筋。
- 用1,2....9组成三个三位数abc,def,ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3,输出所有解
- 问题五十三: 求满足条件n=a!+b!+c!的所有三位数n(a,b,c分别是n的百位十位个位)并输出,要求用自定义函数实现求阶乘。
- 输出所有解的n皇后问题
- 输入一个字符串,要求输出字符串中字符所有的排列,例如输入"abc",得到"abc","acb","bca","bac","cab","cba"
- 用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解
- C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式
- 19. 中兴面试题:输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
- 打印到类阵列的给定序列的所有排列的n皇后问题
- 打印给定一个数组序列的所有的排列的类n皇后问题
- 某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1。使用非递归的算法求解满足要求的n值的程序。
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(数组)
- 输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
- 用1、2、3、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列 要求:"4"不能在第三位,"3"与"5"不能相连。
- 使用回溯算法解决N皇后问题以及间隔排列问题
- 输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
- 不同的取法输出顺序可以不考虑。取字符( 从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。)
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算