图论Day37:深搜基础

深搜三部曲(回溯法)

cpp 复制代码
vector<int> result;
vector<int> path;

void dfs(图, 当前节点){
    if(终点){
        result.push_back(path);
        return;
    }
    for(遍历相邻节点) {
        path.push_back(节点);
        dfs(图, 节点);
        path.pop()//回溯
    }
}

98. 可达路径

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;

vector<vector<int>> result;
vector<int> path;
void dfs(vector<vector<int>> graph, int cur, int N) {
    if(cur == N) {
        result.push_back(path);
        return;
    }
    for(int i = 1; i <= N; i++){
        if(graph[cur][i] == 0){
            continue;
        }
        path.push_back(i);
        dfs(graph, i, N);
        path.pop_back();
    }
}
int main() {
    int N, M;
    cin >> N >> M;

    vector<vector<int>> graph (N + 1, vector<int>(N + 1, 0));
    while(M--){
        int x, y;
        cin >> x >> y;
        graph[x][y] = 1;
    }
    path.push_back(1);
    dfs(graph, 1, N);

    if (result.size() == 0) cout << -1 << endl;
    for (const vector<int> &pa : result) {
        for (int i = 0; i < pa.size() - 1; i++) {
            cout << pa[i] << " ";
        }
        cout << pa[pa.size() - 1]  << endl;
    }
}
相关推荐
We་ct1 天前
LeetCode 79. 单词搜索:DFS回溯解法详解
前端·算法·leetcode·typescript·深度优先·个人开发·回溯
少许极端1 天前
算法奇妙屋(三十)-递归、回溯与剪枝的综合问题 3
算法·深度优先·剪枝·数独·n皇后
条tiao条1 天前
从 “Top-K 问题” 入门二叉堆:C 语言从零实现与经典应用
c语言·算法·深度优先
Tisfy1 天前
LeetCode 1415.长度为 n 的开心字符串中字典序第 k 小的字符串:DFS构造 / 数学O(n)
数学·算法·leetcode·深度优先·字符串·dfs·模拟
jing-ya1 天前
day 50 图论part2
java·算法·深度优先·图论
xiaoye-duck1 天前
《算法题讲解指南:递归,搜索与回溯算法--二叉树中的深搜》--6.计算布尔二叉树的值,7.求根节点到叶节点数字之和
c++·算法·深度优先·递归
重生之后端学习2 天前
62. 不同路径
开发语言·数据结构·算法·leetcode·职场和发展·深度优先
重生之后端学习2 天前
64. 最小路径和
数据结构·算法·leetcode·排序算法·深度优先·图论
We་ct2 天前
LeetCode 212. 单词搜索 II:Trie+DFS 高效解法
开发语言·算法·leetcode·typescript·深度优先·图搜索算法·图搜索
jing-ya2 天前
day 49 图论part1
算法·深度优先·图论