![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DFS深度优先搜索
用DFS解的一些题
深巷wls
平平无奇
展开
-
L3-029 还原文件 (30 分)(DFS)(C/C++)
输入样例:1795 70 80 97 97 68 58 58 80 72 88 81 81 68 68 60 8064 68 58 58 803 81 68 683 95 70 803 68 60 805 80 72 88 81 814 80 97 97 68输出样例:3 6 1 5 2 4a[i]存储第i个折线角点的高度;f[i]存储第i个纸条碎片的信息。通过DFS从没有切碎的纸片最左端开始尝试所有纸条碎片的匹配,now表示当前所需要匹配的碎片左侧在未碎纸片上的位置,..原创 2022-04-16 16:51:49 · 681 阅读 · 0 评论 -
L2-3 完全二叉树的层序遍历 (25 分)(C/C++)
#include<bits/stdc++.h>using namespace std;int n,a[35],b[35];int cnt=0;void dfs(int i){ if(i>n)return; dfs(i*2); dfs(i*2+1); b[i]=a[cnt++];}int main(){ cin >> n ; for(int i=0;i<n;i++) { cin >> a[i] ; } dfs(1);.原创 2022-04-06 21:54:04 · 1529 阅读 · 0 评论 -
试题 E: 玩具蛇(C/C++)
题目描述:小蓝有一条玩具蛇,一共有 16 节,上面标着数字 1 至 16。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 90 度角。小蓝还有一个 4 × 4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 A 到 P 共 16 个字母。小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。下图给出了两种方案:请帮小蓝计算一下,总共有多少种不同的方案。如果两个方案中,存在玩具蛇的某一节放在了盒子的不同格子里,则认为是不同的方案。思路:枚举蛇头的位置,然后开始d原创 2022-03-26 15:41:56 · 1137 阅读 · 0 评论 -
P1030 求先序遍历(C/C++)
用了substr函数,用法:string x;x.substr(start,len);从start位置开始拷贝n长度的字符串首先要知道,给你一个后序遍历,那么最后一个就是根(如ABCD,则根为D)。找到根之后,在中序遍历找到根,根左边是左子树,右边是右子树,然后不断循环递归搜索子树,直到完全求解。#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#in.原创 2022-03-21 22:33:17 · 804 阅读 · 0 评论 -
自然数拆分(dfs)C/C++
对于任意大于 1的自然数 n,总是可以拆分成若干个小于 n 的自然数之和。现请你编写程序求出 n的所有拆分。输入格式输入文件共一行,包含一个自然数,即要拆分的自然数 n(1 \le n \le 20)n(1≤n≤20)。输出格式输出文件有若干行,每行包含一个等式,即代表一种可行的拆分(格式与顺序参见样例)。Sample Input5Sample Output5=1+1+1+1+15=1+1+1+25=1+1+35=1+2+25=1+45=2+3之前有一篇类似的文章,用的是回溯,原创 2022-01-13 20:11:59 · 1245 阅读 · 0 评论 -
Perket调配料(C/C++)dfs
你有 N 种配料,每种配料有酸度 S 和苦度 B 。用这些配料做成Perket时,总的酸度为所有配料酸度的乘积,总的苦度是所有配料苦度的和。你至少需要添加一种配料。为了使口感适中,总的酸度和苦度之差的绝对值应该尽可能小,求这个最小值。输入第一行 1 个整数N (1≤N≤10) —— 配料的数量。接下来 N 行每行 2 个整数Si和Bi—— 每种配料的酸度和苦度。如果用所有配料来做Perket,总的酸度和苦度都 ≤10^9。输出N 行,每行 1 个整数 —— 所求的最小值。Sample Inp原创 2022-01-13 18:59:34 · 431 阅读 · 0 评论 -
棋盘问题(C/C++)
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n当为-1 -1时表示输入结束。随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区原创 2022-01-12 20:52:14 · 3094 阅读 · 2 评论 -
八皇后问题(权值最大)C/C++
n皇后问题可以看此处努比亚和苏丹没有子女,所以他要从一些有集成资格的继承者中挑选一个出来继承王位。他希望这个继承者足够聪明,所以他准备了一个西洋棋盘,上面的每个格子中均有一个 1−99 的数字。他又准备了 8 个皇后棋子。88 皇后的规则就是不能有任何棋子同行或者同列或者同斜线,在满足这个规则的同时,王位继承者还需要让 8 个皇后所在的位置的数字的和是最大的。输入格式输入一个数字 k(k≤20),代表棋盘的数量。接下来有 k 个棋盘,每个棋盘有 64 个数字,分成 8 行 8 列出入,具体可见样例原创 2022-01-12 19:55:57 · 175 阅读 · 0 评论 -
P1164 小A点菜(dp,dfs)C/C++
P1164 小A点菜正解在最下面DFS解法,超时思路:每种菜只有选和不选两种,用dfs暴力一遍,结果超时了#include<bits/stdc++.h>using namespace std;int a[10010],s=0,n,m;void dfs(int step,int money){ if(money==0){ s++; return ; } if(step==n+1)return ;//已经是最后一个菜 if(money>=a[step]原创 2021-12-01 16:05:04 · 811 阅读 · 0 评论 -
P1025 [NOIP2001 提高组] 数的划分(DFS)C/C++
![在这里插入图片描述](https://img-blog.csdnimg.cn/6106e5ca95eb47c4a70bd0d07cec6f9b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rex5be3d2xz,size_20,color_FFFFFF,t_70,g_se,x_16DFS模拟:#include<iostream>using namespac原创 2021-11-24 22:13:03 · 418 阅读 · 0 评论 -
P1706 全排列问题(DFS+回溯)C++
P1706 全排列问题1-9九个数好比1-9九张扑克牌,数组好比盒子。九个数太多,在这里拿1-3举例开始每个盒子放入对应的扑克,就是1 2 3走到第4个盒子那里发现手里没有扑克了,就往回走拿起3号盒子里面的3,手里也就只有3没有其他的号码,只好这样,继续往回走;走到2号盒子里拿起2,于是手里就有2和3,2已经放过了,就把3放进去,然后往后走,2放入3号盒子,就是1 3 2用vis[]数组记录数字是否用过了#include<iostream>#include<stdio.h&原创 2021-07-14 15:38:24 · 177 阅读 · 0 评论 -
P1219 [USACO1.5]八皇后 Checker Challenge(DFS)C++
P1219 [USACO1.5]八皇后 Checker Challenge对于一条从右上到左下的对角线,其上的棋子坐标应满足x+y为一定值;对于一条从左上到右下的对角线,其上的棋子坐标应满足x-y为一定值,为了避免负数的产生,代码中用x-y+n来储存数字用一个a[][]数组判断该位置是否能放皇后,a[1]代表该列,a[2]代表右上到左下这条对角线,a[3]代表左上到右下这条对角线#include<iostream>#include<stdio.h>#includ原创 2021-07-14 15:25:11 · 185 阅读 · 0 评论