DFS
穷源溯流
路很长,尽管走便是。
展开
-
POJ 1816 Wild Words(Trie+DFS)
题目比较毒瘤给出 n 个模式串,m 个单词,查询每一个单词与哪一个模式串匹配,其中 ?可以表示任意一个单词,* 可以表示为 空或者任意多个单词一看到这个题不应该向 AC 自动机考虑吗?发现题目中单词的数目不多,且单词的长度很小,故在查询的时候采用暴力的方式,先利用模式串建好字典树在查询过程中利用 dfs 的方式,但是要注意的是遇到 * 之后,由于其可以为空,所以单词的长度可以不再增加,当然也可以表示剩余的所有字母但是这样还是不对,在 dfs 过程中不可以 return:...原创 2021-02-19 16:02:12 · 178 阅读 · 0 评论 -
洛谷 P3072 [USACO13FEB]Perimeter S(dfs)
题目保证所有的草堆构成连通块,我们可以用 dfs 很简单的获得各个草堆的相对位置如上图所示,白色的方块为草堆的位置,那么他的外周长是绿色的方块个数,其中红色方块个数的贡献是二,也就是说绕着外周长的外面走一圈,看看当前方格挨着几个草堆,这样通过 dfs 就可以将问题解决了。遍历所有的绿色/红色方块一次且仅以此,搜索到白色那么 ans+1,此方块的任务结束const int N=2e5+5; int n,m; int i,j,k; //int a[N];...原创 2021-01-17 16:41:09 · 353 阅读 · 0 评论 -
2020ICPC Walking Machine(网格深搜)
有一个网格 n*m ,网格上有一个字母,必须按照网格上的指示移动,问从这 n*m 个点出发有几个点可以出界只要深搜姿势正确,再加点信心,AC 其实很简单const int N=1e3+5; int n,m,t; int i,j,k; char a[N][N]; int vis[N][N]; int flag=0;void dfs(int x,int y){ if(vis[x][y]==-1) return ; ...原创 2020-10-26 23:33:39 · 201 阅读 · 0 评论 -
HDU 6113 度度熊的01世界
理清楚题意即可,首先我们要确定只有一个 1连通块,在找是否有被 1 包含的 0 连通块即可判断是否被包含,只要确定 0 连通块的边缘是否为整个图的边缘即可const int N=100+5; int n,m,t,ans; int i,j,k; char a[N][N]; bool vis[N][N]; int T,B,L,R;//记录 ‘0’ 的边缘位置bool valid(int x,int y){ if(x<1 || x&...原创 2020-07-05 10:55:02 · 170 阅读 · 0 评论 -
n的约数(数论+DFS)
const int N=100+5; ll n,m,t,ans; int i,j,k; int prime[N],num; bool vis[N],flag;void init(const int lock=100){ num=0; for(int i=2;i<=lock;i++){ if(!vis[i]){ prime[++num]=i; for(int j=2*i;j<...原创 2020-07-05 09:45:47 · 2242 阅读 · 0 评论 -
贝伦卡斯泰露(DFS || BFS)
有题目可知,最后我们一定会得到 a数组与b 数组相等的情况const int N=50+5; int n,m,t; int i,j,k; int a[N],b[N],tag[N]; bool flag;void DFS(int pa,int pb,int cur)//pa a数组所储存的元素个数,pb b数组的元素个数,cur 原数组{ if(flag) return ; if(pa> (n>>1) ) return ...原创 2020-07-04 23:27:20 · 807 阅读 · 1 评论 -
HDU 1539 Shredding Company(数位 DFS)
题意:给你一个字符串,以及一个目标值,叫你切割字符串,然后把他们的和加起来,找到一个比目标值小的并尽可能接近目标值的和,如果有多于一个这样的和就输出rejected,如果没有则输出error,否则输出那个值。const int N=20+5; int n,m,t; int i,j,k; char s[N]; int a[N]; int ans[N],ans_num; int flag,len,num,maxx;void DFS(int su...原创 2020-07-04 20:00:11 · 204 阅读 · 0 评论 -
POJ 1248 / HDU 1015 Safecracker
从给出的字符串中选取5个,设为v,w,x,y,z,要满足等式:v-w^2+x^3-y^4+z^5=target;(要求字典序最大)因为可能有多组解,而题目要求输出字典序最大的那个,所以先将字符串按升序排序然后再搜索,这样得到的第一组解即为答案const int N=20+5; int n,m,t; int i,j,k; char s[N]; int ans[5]; bool vis[N],flag;void DFS(int step,const ...原创 2020-07-04 19:00:58 · 190 阅读 · 0 评论 -
POJ 1564 && HDU 1258 Sum It Up(非递增的DFS)
给出数n,k ,再给出 n 个非递增的数,输出所有的可能使几个数的和等于 k 的表达式const int N=100+5; int n,m,t; int i,j,k; int a[N]; bool vis[N],flag; int ans[N]; void DFS(int cur,int num,int sum){ if(sum==k){ for(int i=0;i<num;i++){ if..原创 2020-07-04 00:09:28 · 206 阅读 · 0 评论 -
HUD 1016 Prime Ring Problem(简单DFS)
const int N=20+5;const int prime[]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0 };//前40个素数打表 int n,m,t; int i,j,k; int a[N]; bool vis[N]; bool flag; void DFS(int step){ //de...原创 2020-07-03 20:05:14 · 176 阅读 · 0 评论 -
HDU 2614 Beat
有n个问题,T[i][j]表示解决完i问题后去解决j问题的用时,假设当前刚刚解决的问题为 i,正要解决的问题为 j ,那么在 j 上花费的时间要更多。现在从第0个问题开始解决,第0个问题用时为0,问最多可以解决多少问题const int N=20+5; int n,m,t; int i,j,k; int a[N][N]; int ans; bool vis[N];void DFS(int step,int num,int cost){ ...原创 2020-07-02 23:27:25 · 187 阅读 · 0 评论 -
HDU 2102 A计划
const int N=20+5;const int dx[]={0,1,0,-1};const int dy[]={1,0,-1,0}; int n,m,t; int i,j,k; char ch[2][N][N]; bool vis[2][N][N];bool valid(int x,int y,int z){ if(x<0 || x>=n) return false; if(y<0 || y>=m) return...原创 2020-07-02 23:03:21 · 161 阅读 · 0 评论 -
Oil Deposits (连通块 模板题)
传送门求连通块的个数#pragma GCC optimize(2)#include <bits/stdc++.h>#define rush() int T;cin>>T;while(T--)#define go(a) while(cin>>a)#define ms(a,b) memset(a,b,sizeof a)#define E 1e-8#define debug(a) cout<<"*"<<a<<"*"<原创 2020-06-12 19:54:06 · 243 阅读 · 0 评论 -
E. Cyclic Components(dfs模板)
You are given an undirected graph consisting ofnnvertices andmmedges. Your task is to find the number of connected components which are cycles.Here are some definitions of graph theory.An undirected graph consists of two sets: set of nodes (called ...原创 2020-06-07 15:19:45 · 211 阅读 · 0 评论 -
D. Divide by three, multiply by two(dfs模板)
Polycarp likes to play with numbers. He takes some integer numberxx, writes it down on the board, and then performs with itn−1n−1operations of the two kinds:divide the numberxxby33(xxmust be divisible by33); multiply the numberxxby22.After ...原创 2020-06-07 14:58:52 · 278 阅读 · 0 评论 -
How many ways(DP&&深搜)
这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m)。游戏的规则描述如下:1.机器人一开始在棋盘的起始点并有起始点所标有的能量。2.机器人只能向右或者向下走,并且每走一步消耗一单位能量。3.机器人不能在原地停留。4.当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将只有终点所标记的能量。如上图,机器人一开始在(1,1)点,并...原创 2020-04-04 18:06:20 · 187 阅读 · 0 评论 -
破棋盘上N皇后
描述一个N*N棋盘,因为棋盘太旧了,有些格子破掉不能放皇后了。请你统计破棋盘上N皇后问题解的数量。输入第一行2个正整数N,K,代表棋盘大小和破格子数量下面K行,每行2个整数,代表破格子的行、列号输出1个整数,代表破棋盘上N皇后问题解的数量;若无解,输出“No Solution!”样例输入#1:8 41 12 23 37 5 #2:8 0样例输出...原创 2020-02-10 13:43:01 · 683 阅读 · 0 评论 -
回溯法解N皇后
描述使用回溯技术改进递归算法,边递归边进行check。请你统计N皇后问题解的数量。输入一个正整数N(N <= 13)输出1个整数,代表N皇后问题解的数量;若无解,输出“No Solution!”。样例输入8样例输出92提示* 虽说回溯法相对于朴素枚举来说是一个很大改进,但是并不能降低复杂度(还是指数的),对于较大的N(>15...原创 2020-02-10 13:27:01 · 511 阅读 · 0 评论 -
1206:放苹果(递归)&&(深搜)
【题目描述】把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。【输入】第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1≤M,N≤10。【输出】对输入的每组数据M和N,用一行输出相应的K。【输入样例】17 3【输出样例】8当苹...原创 2020-01-29 15:49:31 · 1262 阅读 · 0 评论 -
1221:分成互质组
【题目描述】给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?【输入】第一行是一个正整数n。1 ≤ n ≤ 10。第二行是n个不大于10000的正整数。【输出】一个正整数,即最少需要的组数。【输入样例】614 20 33 117 143 175【输出样例】3// Created on 2020/2/6/...原创 2020-02-06 15:26:23 · 1366 阅读 · 0 评论 -
1218:取石子游戏
【题目描述】有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。比如初始的时候两堆石子的数目是25和7。25 7 --> 11 7 --> 4 7 --> 4 3 --> 1 3 --> 1 0...原创 2020-02-06 10:16:07 · 718 阅读 · 0 评论 -
1212:LETTERS
【题目描述】给出一个roe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。【输入】第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。接着输出R行S列字母矩阵。【输出】最多能走过的不同字母的个数。【输入样例】3 6HFDFFBAJHGDHDGAGEH...原创 2020-02-05 22:52:03 · 1779 阅读 · 0 评论 -
1217:棋盘问题
【题目描述】在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 k个棋子的所有可行的摆放方案 C。【输入】输入含有多组测试数据。每组数据的第一行是两个正整数n,k,用一个空格隔开,表示了将在一个n×n的矩阵内描述棋盘,以及摆放棋子的数目。 (n≤8,k≤n)...原创 2020-02-05 21:47:33 · 1114 阅读 · 0 评论 -
1216:红与黑
【题目描述】有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。【输入】包括多个数据集合。每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下:1)‘.’:黑色...原创 2020-02-05 20:13:53 · 1680 阅读 · 0 评论 -
1215:迷宫
【题目描述】一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法...原创 2020-02-05 17:31:55 · 1353 阅读 · 0 评论 -
1219:马走日
【题目描述】马在中国象棋以日字形规则移动。请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。【输入】第一行为整数T(T < 10),表示测试数据组数。每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0≤x≤n-1,0≤y≤m-1, m &l...原创 2020-02-05 15:35:12 · 1038 阅读 · 0 评论 -
1213:八皇后问题
【题目描述】在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。【输入】(无)【输出】按给定顺序和格式输出所有八皇后问题的解(见样例)。【输入样例】(无)【输出样例】(和正常的不一样唉~~)No. 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0...原创 2020-02-05 12:46:49 · 1113 阅读 · 0 评论 -
1214:八皇后
【题目描述】会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 × 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。给出一个数...原创 2020-02-05 11:46:46 · 1633 阅读 · 0 评论 -
1317:组合的输出
【题目描述】排列与组合是常用的数学方法,其中组合就是从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...原创 2020-02-04 23:13:09 · 1042 阅读 · 0 评论 -
1318:自然数的拆分
【题目描述】任何一个大于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+4tota...原创 2020-02-04 22:57:22 · 915 阅读 · 1 评论