代码随想录算法训练营|图论内容复习

图论内容复习

稀疏图就是边少,稠密图就是边多

首先是图的存储有三种。分别是朴素存储,开辟一个\(n\times 2\)的数组,邻接矩阵和邻接表。邻接矩阵适合于稠密图,邻接表适合于稀疏图

深度优先搜索

卡玛网98所有可达路径

深搜三部曲

  1. 确定递归函数和参数

  2. 确认终止条件

  3. 处理当前结点出发的路径

今天的程序有BUG

需要注意的是,在dfs的编写中,循环的终止条件是i <= n,这个一开始写成i < n

点击查看代码
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> result;
vector<int> path;

void dfs(vector<vector<int>> &graph, int x, int n) {
    
    if (x == n) {
        result.push_back(path);
        return;
    }
    for (int i = 1; i <= n; i++) {
        if (graph[x][i] == 1) {
            path.push_back(i);
            dfs(graph, i, n);
            path.pop_back();
        }
    }
}

int main () {
    // 图的存储
    int s, t, N, M;
    cin >> N >> M;
    vector<vector<int>> graph(N + 1, vector<int>(N + 1, 0));
    for (int i = 1; i <= M; i++) {
        cin >> s >> t;
        graph[s][t] = 1;
    }

    path.push_back(1);
    dfs(graph, 1, N);

    if (result.size() == 0) cout << -1 << endl;
    
    for (const vector<int> s : result) {
        for (int i = 0; i < s.size() - 1; i++) {
            cout << s[i] << ' ';
        }
        cout << s[s.size() - 1] << endl;
    }
    
}

99. 岛屿数量 今天写的又有bug,没找到

posted on 2025-06-05 08:59  bnbncch  阅读(14)  评论(0)    收藏  举报