DAY10 - DFS

今天写广度优先搜寻(DFS),与BFS相同,DFS是一种图形搜寻演算法,在解题的时候会用来爆搜的其中一种方法
直接上模板

模板&解释

尽可能探索每一个分支,走到底後回溯
模板像这样

void dfs(){
    if(越界或不合理状态)
        return
    for(对当前节点扩展){
        if(next_node合理&&未被访问){
            vis[next_node] = 1
            dfs(next_node)
            vis[next_node] = 0
        }
    }
}

例题实战

一样先上一题模板题,也是很经典的题目!!
46. 全排列

class Solution {
    vector<vector<int>> res;
public:
    vector<vector<int>> permute(vector<int>& nums) {
        generate(nums, 0);
        return res;
    }
    void generate(vector<int>& nums, int n)
    {
        if(n >= nums.size()){
            res.push_back(nums);
            return;
        }
            
        for(int i = n; i < nums.size(); i++){
            swap(nums[n], nums[i]);
            generate(nums, n+1);
            swap(nums[n], nums[i]);
        }
    }
};

100. 相同的树
这题可以用BFS与DFS写,可以比较这两天写的东西~~
((今天在讲dfs,就放dfs的解法))

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {        
        if(p==nullptr&&q==nullptr){
            return true;
        }
        if(p==nullptr^q==nullptr){
            return false;
        }
        if(p->val==q->val){
            return isSameTree(p->left, q->left)&&isSameTree(p->right, q->right);
        }
        else{
            return false;
        }
    }
};

<<:  Day10 - 敏捷式接案实践 (二) - 专案管理

>>:  Reactive programming

[Day 23] Facial Landmark

人脸关键点 (Facial Landmark)是找出人脸上五官的位置 而目前在应用上人脸关键点几乎都...

codepen

如何载入CND 1.Fork 2.齿轮 ...

[DAY 23] _I2S协议(1)

昨天介绍完I2S由於我还没写出stm32f030的spi读写Flash的程序,就没付上代码解释了,我...

LeetCode解题 Day21

485. Max Consecutive Ones https://leetcode.com/pro...

Day 28 Easy x 2

Day 28 Easy x 2 LeetCode 100 题 待优化的两题 Guess Number...