当前位置: 首页 > wzjs >正文

led 网站模板网站备案 是域名还是空间

led 网站模板,网站备案 是域名还是空间,太仓专业网站建设,wordpress 微博经典回溯算法 回溯算法是一种基于深度优先搜索的算法,通过探索所有可能的候选解来找出所有可能的解。当候选解不满足条件时,会回溯到上一步,尝试其他的候选解。下面将介绍回溯算法在组合问题、切割问题、排列问题、子集问题、棋盘问题和图的…

经典回溯算法

回溯算法是一种基于深度优先搜索的算法,通过探索所有可能的候选解来找出所有可能的解。当候选解不满足条件时,会回溯到上一步,尝试其他的候选解。下面将介绍回溯算法在组合问题、切割问题、排列问题、子集问题、棋盘问题和图的遍历等方面的应用。

组合问题

如从 N 个数中选出 k 个数的所有组合方式。以从数组 [1,2,3,4] 中选 2 个数为例,其核心思想是通过回溯的方式尝试所有可能的组合。具体步骤如下:

  • 初始化 :定义结果集和路径变量,结果集用于存储所有满足条件的组合,路径变量用于存储当前递归路径上的元素。
  • 递归函数 :参数包括起始位置 startindex、目标个数 k、数组等。终止条件是路径的长度等于 k 时,将路径添加到结果集中。在循环中,从 startindex 开始遍历数组,依次将元素添加到路径中,并递归调用函数,起始位置加 1,继续选择下一个元素。回溯时移除路径中的最后一个元素。
  • 代码演示
func combine(n int, k int) [][]int {result := [][]int{}path := []int{}var backtrack func(startIndex int)backtrack = func(startIndex int) {if len(path) == k {temp := make([]int, k)copy(temp, path)result = append(result, temp)return}for i := startIndex; i <= n; i++ {path = append(path, i)backtrack(i + 1)path = path[:len(path)-1]}}backtrack(1)return result
}

切割问题

一个字符串按一定规则有几种切割方式。例如将字符串 “aab” 切割成所有可能的子字符串组合。其核心思想是通过回溯的方式尝试所有可能的切割位置。具体步骤如下:

  • 初始化 :定义结果集和路径变量。
  • 递归函数 :参数包括起始位置 startindex、字符串等。终止条件是起始位置等于字符串长度时,将路径添加到结果集中。在循环中,从 startindex 开始遍历字符串,依次切割子字符串,判断是否符合要求,如果符合,就将其添加到路径中,并递归调用函数,起始位置更新为 i+1。回溯时移除路径中的最后一个元素。
  • 代码演示
func partition(s string) [][]string {result := [][]string{}path := []string{}var backtrack func(startIndex int)backtrack = func(startIndex int) {if startIndex >= len(s) {temp := make([]string, len(path))copy(temp, path)result = append(result, temp)return}for i := startIndex; i < len(s); i++ {if isPalindrome(s[startIndex : i+1]) {path = append(path, s[startIndex:i+1])backtrack(i + 1)path = path[:len(path)-1]}}}backtrack(0)return result
}
func isPalindrome(s string) bool {for i := 0; i < len(s)/2; i++ {if s[i] != s[len(s)-1-i] {return false}}return true
}

排列问题

如 N 个数的所有排列方式。以数组 [1,2,3] 的全排列为例。其核心思想是通过回溯的方式尝试所有可能的排列。具体步骤如下:

  • 初始化 :定义结果集和路径变量,同时定义一个 used 数组来记录元素是否被使用。
  • 递归函数 :参数包括 used 数组等。终止条件是路径的长度等于数组长度时,将路径添加到结果集中。在循环中,依次选择未使用的元素,将其添加到路径中,并标记为已使用,递归调用函数。回溯时移除路径中的最后一个元素,并标记为未使用。
  • 代码演示
func permute(nums []int) [][]int {result := [][]int{}path := []int{}used := make([]bool, len(nums))var backtrack func()backtrack = func() {if len(path) == len(nums) {temp := make([]int, len(path))copy(temp, path)result = append(result, temp)return}for i := 0; i < len(nums); i++ {if !used[i] {used[i] = truepath = append(path, nums[i])backtrack()path = path[:len(path)-1]used[i] = false}}}backtrack()return result
}

子集问题

如从 N 个数中选出所有符合条件的子集。以数组 [1,2,3] 的所有子集为例。其核心思想是通过回溯的方式尝试所有可能的子集。具体步骤如下:

  • 初始化 :定义结果集和路径变量。
  • 递归函数 :参数包括起始位置 startindex、数组等。终止条件是当起始位置大于等于数组长度时结束。在循环中,从 startindex 开始遍历数组,依次将元素添加到路径中,并添加到结果集中,然后递归调用函数,起始位置加 1,继续向下搜索。回溯时移除路径中的最后一个元素。
  • 代码演示
func subsets(nums []int) [][]int {result := [][]int{}path := []int{}var backtrack func(startIndex int)backtrack = func(startIndex int) {temp := make([]int, len(path))copy(temp, path)result = append(result, temp)for i := startIndex; i < len(nums); i++ {path = append(path, nums[i])backtrack(i + 1)path = path[:len(path)-1]}}backtrack(0)return result
}

棋盘问题

经典的八皇后问题是回溯算法在棋盘问题中的典型应用。其核心思想是通过回溯的方式尝试在棋盘上放置皇后。具体步骤如下:

  • 初始化 :定义棋盘和结果集。
  • 递归函数 :参数包括行号 row 等。终止条件是当行号等于棋盘大小时,将当前棋盘状态添加到结果集中。在循环中,依次尝试在当前行的每一列放置皇后,判断是否满足条件,如果满足,就在此位置放置皇后,并递归调用函数,行号加 1。回溯时撤销皇后的位置。
  • 代码演示
func solveNQueens(n int) [][]string {result := [][]string{}board := make([][]string, n)for i := range board {board[i] = make([]string, n)for j := range board[i] {board[i][j] = "."}}var backtrack func(row int)backtrack = func(row int) {if row == n {temp := make([]string, n)for i := range board {temp[i] = strings.Join(board[i], "")}result = append(result, temp)return}for col := 0; col < n; col++ {if isValid(board, row, col) {board[row][col] = "Q"backtrack(row + 1)board[row][col] = "."}}}backtrack(0)return result
}
func isValid(board [][]string, row, col int) bool {for i := 0; i < row; i++ {if board[i][col] == "Q" {return false}}for i, j := row-1, col-1; i >= 0 && j >= 0; i, j = i-1, j-1 {if board[i][j] == "Q" {return false}}for i, j := row-1, col+1; i >= 0 && j < len(board); i, j = i-1, j+1 {if board[i][j] == "Q" {return false}}return true
}

图的遍历

深度优先搜索(DFS)是回溯算法在图的遍历中的典型应用。其核心思想是通过回溯的方式深度优先地遍历图。具体步骤如下:

  • 初始化 :定义访问标记数组,用于记录节点是否被访问过。
  • 递归函数 :参数包括当前节点等。终止条件是当所有节点都被访问过时结束。将当前节点标记为已访问,并依次访问其邻接节点,若邻接节点未被访问过,则递归调用函数。回溯时将当前节点标记为未访问。
  • 代码演示
func DFS(graph [][]int, start int) {visited := make([]bool, len(graph))var dfs func(v int)dfs = func(v int) {visited[v] = truefmt.Print(v, " ")for _, w := range graph[v] {if !visited[w] {dfs(w)}}}dfs(start)
}

文章转载自:

http://UNhGD0Gm.rmtxp.cn
http://B3h85fpj.rmtxp.cn
http://C7NGF6or.rmtxp.cn
http://1JIqRI0y.rmtxp.cn
http://PPwKmDHF.rmtxp.cn
http://Myf4VM54.rmtxp.cn
http://sG4bs19x.rmtxp.cn
http://EMllOoVD.rmtxp.cn
http://in5lkb9U.rmtxp.cn
http://RgDyPoDD.rmtxp.cn
http://9C3jRfbn.rmtxp.cn
http://JK686PJ3.rmtxp.cn
http://YzSsjIlv.rmtxp.cn
http://jRqnyUGu.rmtxp.cn
http://trI7ujRB.rmtxp.cn
http://jHJBd3PE.rmtxp.cn
http://FiPLXT89.rmtxp.cn
http://961hjSkz.rmtxp.cn
http://DjaE4ypQ.rmtxp.cn
http://bGjMUjwx.rmtxp.cn
http://xrkzJCxK.rmtxp.cn
http://ZGuoHoDe.rmtxp.cn
http://5sAGBz8Y.rmtxp.cn
http://a438BkKI.rmtxp.cn
http://ZAdjv3yk.rmtxp.cn
http://I3DKdLVU.rmtxp.cn
http://TCTM45ah.rmtxp.cn
http://xnYDP5ZN.rmtxp.cn
http://5VZpAGfM.rmtxp.cn
http://bHHIEYtY.rmtxp.cn
http://www.dtcms.com/wzjs/717502.html

相关文章:

  • 龙岗网站建设网站制作宁波网站建设公司费用价格
  • 资深的教育行业网站开发去哪里推广软件效果好
  • 网站建设0基础中信建设有限责任公司年报
  • 安微凤阳县建设局网站用iis做网站
  • 国外财经网站是怎么做的秦皇岛网站公司
  • 昆明网站搭建多少钱网站建设教学视频教程
  • 开个做网站的公司服饰技术支持 东莞网站建设
  • 谁有网站推荐一下好吗平台电商网站开发
  • 企业门户网站的设计 流程图网站建设如何敲图标代码
  • 求几个夸克没封的a站2023百度快照官网
  • 湘潭网站建设 多少钱磐石网络天元建设集团有限公司欠款
  • php网站支付宝接口网站代码下载
  • 凡科做视频网站手机商城网站开发
  • 公司网站建设费怎么写分录建筑信息网
  • 网站免费源码大全无需下载广州网站排名优化公司
  • 怎么做vip电影网站社交网站建设码
  • 做笔记网站农业企业网站模板
  • 商城网站设计建最便宜的网站要多少钱
  • 温州网站建设哪家好天津网站seo设计
  • 4a网站建设公司颐和国际沧州网络科技
  • 任丘建设网站制作ui设计的软件
  • 如何进行网站的推广云主机网站面板
  • 怀远县建设局网站有谁做过网站建设
  • 网站监控的软件怎么做科技有限公司的经营范围
  • asp转换手机网站重庆网站建设招聘信息
  • 公司网站购买主机微商城网站开发
  • 可以直接做室内su的网站做公众号首图网站
  • 哪些网络公司可以做机票预订网站毕业设计医院网站设计怎么做
  • 平面设计师用的网站wordpress搭建电影网
  • 用子域名可以做网站吗电子商务的模式有哪些