DFS
yyz!!!
这个作者很懒,什么都没留下…
展开
-
(bfs/bfs)连通块+最短路径
读入大量字符:快读配置将cin,cout和scanf和printf解除绑定,提高效率。之后只能用cin,coutstd::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);在输入是很多字符时,需要吃掉换行符cin>>N; char next; cin.get(next); while(next!='\n') cin.get(next);例如在读入一个N*N的地图时://读入地图原创 2021-03-11 11:27:16 · 447 阅读 · 0 评论 -
洛谷P2404-整数拆分
题目输入一个整数7输出1+1+1+1+1+1+11+1+1+1+1+21+1+1+1+31+1+1+2+21+1+1+41+1+2+31+1+51+2+2+21+2+41+3+31+62+2+32+53+4代码#include<bits/stdc++.h>#define MAX 9using namespace std;int n;int a[MAX]= {1}; //第i个数用了几次void dfs(int cnt,int sum){原创 2021-04-10 01:08:43 · 302 阅读 · 0 评论 -
洛谷P1101-单方向搜索特定序列
题目原题传送门输入8qyizhonggydthkjynwidghjiorbzsfgzhhgrhwthzzzzzozoiwdfrgngyyyygggg给定n的方阵,搜索里面按照八个方向中的任意一个方向的制定字符串“yizhong”。输出就是除了找到的东西其余的都输出为“*”。输出yizhonggy*****ni*****oz***hh***zo**i*****ny****g分析首先是指定方向的dfs,那就将方向也放入参数。然后在main函数中设置参数的for循环原创 2021-04-09 23:33:22 · 139 阅读 · 0 评论 -
洛谷P1019-求一堆单词能拼起来最长
题目原题传送输入:5 //一共5个单词attouchcheatchoosetacta //给定的开头输出:23按照这个给定的开头每个单词最多使用两次,最长能拼接成多长的字符串。分析首先:拼接后的字符串最长——那就需要拼接的两个单词是拥有最少重叠部分的。所以一个重点就是求指定俩个单词(首单词,尾单词)的最少重叠部分。倒着来可以保证重叠最小。我们从首单词的尾巴开始。因此首先需要一层循环控制现在从首单词的第i个位置(i:n -> 1)开始去找和尾单词是否重合。之后里面要判断是原创 2021-04-09 00:47:40 · 109 阅读 · 0 评论 -
DFS:蓝桥杯-数字三角形
题目原题传送门代码#include<bits/stdc++.h>#define MAX 101using namespace std;int n;int a[MAX][MAX]={0};int res=-1;void dfs(int hang,int lie,int left,int right,int sum){ if(hang<1||lie<1||hang>n||lie>n||lie>hang||abs(left-right)>原创 2021-04-04 20:32:41 · 216 阅读 · 1 评论 -
DFS——全排列+寒假作业(都是一维数组填数字)
DFS模板void dfs(参数) //参数就是需要变化的数字,像这俩道题就是指第index个数字{ if(达到最终状态){ 目的语句; //类似ans++或者输入什么东西。像全排列就是输出从1-n的全排列 } if(不被允许的状态){ return; } if(特殊条件){ //用来剪枝,就像寒假作业这个题就是当index到第4位时,前三个有没有满足1+2=3.没有的话就return return; } //进行扩展 for(扩展方式){ //这俩题就是设置i从1开始,作为原创 2021-03-11 22:00:12 · 122 阅读 · 0 评论