卡码网KamaCoder 98. 所有可达路径
题目来源:https://kamacoder.com/problempage.php?pid=1170
C++题解1:深度优先搜索,邻接矩阵
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> result;
vector<int> path;void dfs(const vector<vector<int>>& graph, int x, int N){path.push_back(x);if(x == N) result.push_back(path); else {for(int i = 1; i <= N; i++) {if(graph[x][i] == 1) dfs(graph, i, N);}}path.pop_back();return;}int main() { // 输入int N, M;cin >> N >> M;vector<vector<int>> graph(N+1, vector<int>(N+1, 0));for (int i = 0; i < M; i++) {int a, b;cin >> a >> b;// 使用邻接矩阵 表示无线图,1 表示 s 与 t 是相连的graph[a][b] = 1;}// 处理 从起点1开始dfs(graph, 1, N);// 输出int length = result.size();if(length == 0) {cout<<-1;return 0;}for(int k = 0; k < length; k++) {for(int m = 0; m < result[k].size(); m++){cout<<result[k][m];if(m == result[k].size()-1) cout<<endl;else cout<<" ";}}return 0;
}
C++题解2:深度优先搜索,邻接表
#include <iostream>
#include <vector>
#include <list>
using namespace std;
vector<vector<int>> result;
vector<int> path;void dfs(const vector<list<int>>& graph, int x, int N){path.push_back(x);if(x == N) result.push_back(path);else {int mm = graph[x].size();// 注意list的迭代方式for(auto i:graph[x]) dfs(graph, i, N);}path.pop_back();return;
}int main() { // 输入int N, M;cin >> N >> M;vector<list<int>> graph(N+1);for (int i = 0; i < M; i++) {int a, b;// 使用邻接表 ,表示 a -> b 是相连的cin >> a >> b;graph[a].push_back(b);}// 处理dfs(graph, 1, N);// 输出int length = result.size();if(length == 0) {cout<<-1;return 0;}for(int k = 0; k < length; k++) {for(int m = 0; m < result[k].size(); m++){cout<<result[k][m];if(m == result[k].size()-1) cout<<endl;else cout<<" ";}}return 0;
}