上面的解释太过高深,我们可以感性地理解一下它,在较为初级的应用(非图论)中,搜索就是一个暴力枚举,
如这个例子:
-> 把正整数n分解为3个不同的数,如6=1+2+3 排在后面的数必须大于等于前面的数
-对于这个问题,如果不知道搜索,应该怎么办呢?
-当然是3重循环 伪代码如下
-```text
-for i=1..n
- for j=i..n
- for k=1..n
- if (i+j+k=n) printf("%d=%d+%d+%d",n,i,j,k);
-```
-那如果是分解成四个整数呢?
-再加一重循环?
-那分解成小于等于m个整数呢?
-if 一大堆,写m个?
+> 把正整数 n 分解为 3 个不同的数,如 6=1+2+3 排在后面的数必须大于等于前面的数
+> 对于这个问题,如果不知道搜索,应该怎么办呢?
+> 当然是 3 重循环 伪代码如下
+>
+> ```text
+> for i=1..n
+> for j=i..n
+> for k=1..n
+> if (i+j+k=n) printf("%d=%d+%d+%d",n,i,j,k);
+> ```
+>
+> 那如果是分解成四个整数呢?
+> 再加一重循环?
+
+那分解成小于等于 m 个整数呢?
+if 一大堆,写 m 个?
这时候就需要用到搜索了。
上面的例子也可以抽象成图,就是把能分解的数都算作一个点,然后按顺序把他们连起来。
-##模板
+\## 模板
不管是图还是其它,都是这样
伪代码:
+
```text
dfs(n) {
if (碰到边界) //如上面例子中的分解完就是基本情况
有些情况不需要标记,请自行判断。
-##实现(对于图来说)
+\## 实现(对于图来说)
伪代码: