回溯法 8皇后

2024-06-21 04:58
文章标签 皇后 回溯

本文主要是介绍回溯法 8皇后,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题太经典,就不描述问题了:

public class HuangHou8 {static int n=8;static int tot=0;static int[] C;static int[][] vis=new int[3][16];public static void main(String[] args) {tot=0;C=new int[8];search(0);System.out.println(tot);tot=0;C=new int[8];search2(0);System.out.println(tot);}public static void search(int cur){if(cur==n){tot++;for (int i = 0; i < C.length; i++) {System.out.print(C[i]+"  ");}System.out.println();}else{for (int i = 0; i < n; i++) {int ok=1;C[cur]=i;for (int j = 0; j < cur; j++) {if(C[cur]==C[j]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j]){ok=0;break;}}if(ok==1){search(cur+1);}}}}public static void search2(int cur){if(cur==n){tot++;}else{for (int i = 0; i < n; i++) {if(vis[0][i]==0&&vis[1][cur+i]==0&&vis[2][cur-i+n]==0){C[cur]=i;vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=1;search2(cur+1);vis[0][i]=vis[1][cur+i]=vis[2][cur-i+n]=0;}}}}
}


这篇关于回溯法 8皇后的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080268

相关文章

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

代码随想三刷回溯篇2

代码随想三刷回溯篇2 39. 组合总和题目代码 40. 组合总和 II题目代码 131. 分割回文串题目代码 93. 复原 IP 地址题目代码 78. 子集题目代码 39. 组合总和 题目 链接 代码 class Solution {public List<List<Integer>> combinationSum(int[] candidates

194.回溯算法:组合总和||(力扣)

代码解决 class Solution {public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtracing(vector<int>& candidates, int target, int flag, int index, vector<bool>&

LeetCode.51N皇后详解

问题描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。 n 皇后问题是一个经典的回溯

193.回溯算法:组合总和(力扣)

代码解决 class Solution {public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtrcing(vector<int>& nums, int target, int flag, int index) {// 如果当前组合的和超过了目标值,则返

192.回溯算法:电话号码的字母组合(力扣)

代码解决 class Solution {public:// 定义每个数字对应的字母映射const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz" // 9}

N皇后问题(深搜板子题)

N N N皇后问题(以洛谷P1219为例) 在 n × n n\times n n×n大小的棋盘上给出 n n n个皇后,寻找使得所有皇后不同处一行、一列或一条斜线上的摆放方案总数。 本题难点在于考虑剪枝条件: 对广度进行剪枝(列)对副对角线进行剪枝: i + j i+j i+j对主对角线进行剪枝: i − j + n i-j+n i−j+n​(为避免出现负数) #include<bit

拉丁矩阵 回溯 c java

现有n种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵,m n,使矩阵中每一行和每一列的宝石都没有相同形状。试设计一个算法,计算出对于给定的m和n有多少种不同的宝石排列方案。 方法一:(从左往右,从上往下,依次填写,保证上方,左方没有重复的) import java.util.Scanner;public class LaDingJuZhen3 {static int

排列宝石问题 回溯

问题描述: 现有n种不同形状的宝石,每种n 颗,共n*n颗。同一种形状的n颗宝石分别具有n种不同的颜色c1,c2,…,cn中的一种 颜色。欲将这n*n颗宝石排列成n行n列的一个方阵,使方阵中每一行和每一列的宝石都有n种不同形状和n种不同颜 色。 试设计一个算法,计算出对于给定的n,有多少种不同的宝石排列方案。   算法设计: 对于给定的n,计算出不同的宝石排列方案数。    输入文件示

无优先级运算 回溯 Java

问题描述: 给定n个正整数和4个运算符+,-,*,/,且运算符无优先级,如2+3×5=25。对于任意给定的整数m,试设计一个算 法,用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。给出的n个数中每个数最多只能用1次, 但每种运算符可以任意使用 ★ 算法设计:对于给定的n个正整数,设计一个算法,用最少的无优先级运算次数产生 整数m。  输入: n  m     在输入: