随笔分类 -  深搜

摘要:所谓深搜(也叫回溯法)就是采用的是“一直往下走,走不通了就掉头,换一条路再往下走” 总结来说就是递归的枚举 一直往深处走,直到找到解或者走不下去为止 主要步骤:1.构建一个递归函数,函数参数应该最起码包括题目需求使用的参数2.找到边界,递归函数里首先列出递归结束的条件,即满足要求或者超出范围3.接着 阅读全文
posted @ 2022-08-23 21:02 TheMagician 阅读(149) 评论(0) 推荐(0)
摘要:a[i][j] 表示 j 分成 i个非空的数的方案数。 显然 j<i 时 a[i][j]=0 , i=j 时 a[i][j]=1; 方案数为 a[i][j-i] (此时 j 必须大于 i) 所以,状态转移方程为: a[i][j]=a[i-1][j-1]+a[i][i-j] #include<cstd 阅读全文
posted @ 2022-08-23 20:55 TheMagician 阅读(51) 评论(0) 推荐(0)
摘要:函数判断是否相邻:直径与距离 在进行深搜,标记路过的,若不是且相邻,再调用 注意:第一个和底层需独立判断 #include<bits/stdc++.h>using namespace std;long long t,n,h,r,i,j,b[1005],falg,bj;struct ww{ long 阅读全文
posted @ 2022-08-23 17:20 TheMagician 阅读(29) 评论(0) 推荐(0)
摘要:1、查找第一行,从左往右查找,发现合适的位置,放下第一个皇后 2、查找第二行,从左往右查找,发现合适的位置,放下第二个皇后 3、查找第三行,从左往右查找,发现合适的位置,放下第三个皇后 假设要在m行k列放置一个皇后,只需要查看第一行到m-1行就行。如果k列已经存在皇后,那么m行k列这个位置就不适合了 阅读全文
posted @ 2022-08-23 14:18 TheMagician 阅读(45) 评论(0) 推荐(0)
摘要:先定义两个数组,一个是用来存放解的,一个是用来标记该数是否用过。 先判断格子是否填满了,如果填满,则输出。 如果没有填满,则开始循环,在循环中先判断当前填的数是否用过,如果没有,则填入,搜索下一格。 #include<bits/stdc++.h>using namespace std;int a[1 阅读全文
posted @ 2022-08-23 09:55 TheMagician 阅读(28) 评论(0) 推荐(0)
摘要:一个判断素数的函数 另一个函数大体分为: ans=ans+a[n+1];pd(n+1,m+1); ans=ans-a[n+1];//回溯 pd(n+1,m);//下一种方案 注意:不同组合算不同种 #include<bits/stdc++.h>using namespace std;long lon 阅读全文
posted @ 2022-08-23 08:25 TheMagician 阅读(43) 评论(0) 推荐(0)