//图算法
//题目:
//在一个有向图中,找出从起点到终点的所有路径。假设图中不存在环路。
//
//问题函数定义:
//
//cpp
//vector<vector<int>> findAllPaths(vector<vector<int>>& graph, int start, int end);
//裁判测试程序样例:
//
//cpp
#include <iostream>
#include <vector>
using namespace std;
// 问题函数定义
void dfs(vector<vector<int>>& graph, int start, int end, vector<vector<int>>& m, vector<int>& v, vector<int>& cond) {
cond.push_back(start);
if (start == end) {
m.push_back(cond);
}
v[start] = 1;
for (auto s : graph[start]) {
if (!v[s]) {
dfs(graph, s, end, m, v,cond);
}
}
v[start] = 0;
cond.pop_back();
}
vector<vector<int>> findAllPaths(vector<vector<int>>& graph, int start, int end) {
// 实现你的函数
vector<vector<int>> m;
vector<int> v(graph.size(), 0);
vector<int> cond;
dfs(graph, start, end, m, v,cond);
return m;
}
int main() {
vector<vector<int>> graph = { {1, 2}, {2}, {3}, {} };
int start = 0, end = 3;
vector<vector<int>> paths = findAllPaths(graph, start, end);
for (auto& path : paths) {
for (int node : path) {
cout << node << " ";
}
cout << endl;
}
return 0;
}
//输入样例:
//
//graph = { {1, 2}, {2}, {3}, {} }
//start = 0
//end = 3
//输出样例:
//
//0 1 2 3
//0 2 3