当前位置: 首页 > news >正文

代码随想录算法【Day50】

Day50

98. 所有可达路径
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> result; // 收集符合条件的路径
vector<int> path; // 1节点到终点的路径
​
void dfs (const vector<vector<int>>& graph, int x, int n) {
    // 当前遍历的节点x 到达节点n 
    if (x == n) { // 找到符合条件的一条路径
        result.push_back(path);
        return;
    }
    for (int i = 1; i <= n; i++) { // 遍历节点x链接的所有节点
        if (graph[x][i] == 1) { // 找到 x链接的节点
            path.push_back(i); // 遍历到的节点加入到路径中来
            dfs(graph, i, n); // 进入下一层递归
            path.pop_back(); // 回溯,撤销本节点
        }
    }
}
​
int main() {
    int n, m, s, t;
    cin >> n >> m;
​
    // 节点编号从1到n,所以申请 n+1 这么大的数组
    vector<vector<int>> graph(n + 1, vector<int>(n + 1, 0));
​
    while (m--) {
        cin >> s >> t;
        // 使用邻接矩阵 表示无线图,1 表示 s 与 t 是相连的
        graph[s][t] = 1;
    }
​
    path.push_back(1); // 无论什么路径已经是从0节点出发
    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;
    }
}

相关文章:

  • Pycharm中查找与替换
  • 计算机网络-OSI七层参考模型与数据封装,网络安全零基础入门到精通实战教程!
  • ZLMediaKit Windows 编译指南
  • 大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)
  • Java-如何将其他地方拉取的jar包导入本地maven环境
  • vue3中<el-table-column>状态的显示
  • Vue 3 工程化打包工具:从理论到实践 (下篇)
  • dify实现分析-rag-关键词索引的实现
  • 1.16学习
  • 前端面试场景题 1 (批量处理toast、减少if-else)
  • DeepSeek和ChatGPT的全面对比
  • ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)
  • 剑指 Offer II 025. 链表中的两数相加
  • #渗透测试#批量漏洞挖掘#某华-APPGetUser SQL注入漏洞
  • MySQL锁
  • UE5.3 C++ USTRUCT 的再次理解
  • 143.WEB渗透测试-信息收集-小程序、app(14)
  • verilog基础知识
  • 什么是网关,网关的作用是什么?网络安全零基础入门到精通实战教程!
  • Deepseek API接入pycharm实现辅助编程教程
  • 警方通报男子广州南站持刀伤人:造成1人受伤,嫌疑人被控制
  • 北方产粮大省遭遇气象干旱,夏粮用水如何解决?
  • 陕西旱情实探:大型灌区农业供水有保障,大旱之年无旱象
  • 被前男友泼汽油致残后,一个女孩经历的双重灼烧
  • 深圳拟出让3宗居住用地,共计用地面积6.77公顷
  • 从《让·桑特伊》到《追忆》,假故事的胜利