回溯(dfs)
文章平均质量分 52
Ustinian.'
撕破伤口、
展开
-
n皇后问题(回溯dfs)
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于在n×n格的棋盘上放置n个皇后,任何两个皇后不放在同一行或同一列或同一斜线上。编程要求:找出一个n×n格的棋盘上放置n个皇后并使其不能互相攻击的所有方案。题解思路由于棋盘的每列只有一个皇后,所以可以用一维向量X( x1, x2, …, xn),其中xi∈{1, 2, …, n},表示第i列皇后所在的行x[i],即解空间的每个结点都有n个儿子,因此解空间的大小为nn原创 2022-04-12 11:07:34 · 1000 阅读 · 1 评论 -
m着色问题(回溯dfs)
题目描述给定无向连通图G=(V,E)和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中相邻的两个顶点有不同的颜色?这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的两个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。编程计算:给定图G=(V, E)和m种不同的颜色,找出所有不同的着色法和着色总数。输入第一行是顶点的个数n(2≤n≤10),颜色数m(1≤m≤n)。 接下来是顶点之间的相互.原创 2022-04-12 10:57:54 · 496 阅读 · 0 评论 -
0-1背包问题(回溯dfs)
题目描述给定一个物品集合s={1,2,3,…,n},物品i的重量是wi,其价值是vi,背包的容量为W,即最大载重量不超过W。在限定的总重量W内,我们如何选择物品,才能使得物品的总价值最大。输入第一个数据是背包的容量为c(1≤c≤1500),第二个数据是物品的数量为n(1≤n≤50)。接下来n行是物品i的重量是wi,其价值为vi。所有的数据全部为整数,且保证输入数据中物品的总重量大于背包的容量。当c=0时,表示输入数据结束。输出对每组测试数据,输出装入背包中物品的最大价值。解题思路代码原创 2022-04-12 10:27:45 · 269 阅读 · 0 评论 -
装载问题(回溯dfs)
题目描述给定n个集装箱要装上一艘载重量为c的轮船,其中集装箱i的重量为wi。集装箱装载问题要求确定在不超过轮船载重量的前提下,将尽可能多的集装箱装上轮船。由于集装箱问题是从n个集装箱里选择一部分集装箱,假设解向量为X(x1, x2, …, xn),其中xi∈{0, 1}, xi =1表示集装箱i装上轮船, xi =0表示集装箱i不装上轮船。输入每组测试数据:第1行有2个整数c和n。C是轮船的载重量(0<c<30000),n是集装箱的个数(n≤20)。第2行有n个整数w1, w2, …, wn,分别表原创 2022-04-12 10:08:00 · 644 阅读 · 0 评论 -
自然数的拆分(回溯dfs)
【题目描述】任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。当n=7共14种拆分方法:7=1+1+1+1+1+1+17=1+1+1+1+1+27=1+1+1+1+37=1+1+1+2+27=1+1+1+47=1+1+2+37=1+1+57=1+2+2+27=1+2+47=1+3+37=1+67=2+2+37=2+57=3+4【输入】输入n。【输出】按字典序输出具体的方案。【输入样例】7【输出样例】7=1+1+1+1+1+1+17=1+1+1原创 2022-04-11 14:06:35 · 215 阅读 · 0 评论 -
组合的输出(回溯dfs)
【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。现要求你用递归的方法输出所有组合。例如n=5,r=3,所有组合为:1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5【输入】一行两个自然数n、r(1<n<21,1≤r≤n)。【输出】所有的组合,每一个组合占一行且其中原创 2022-04-11 11:47:53 · 779 阅读 · 0 评论