//图算法
//题目:给定一个有向图,求解从指定起点到指定终点的所有路径数量。
//
//问题函数定义:
//
//cpp
//int countPaths(vector<vector<int>>& graph, int start, int end);
//注意count作为引用传递参数
//裁判测试程序样例:
//
//cpp
#include <iostream>
#include <vector>
using namespace std;
void dfs(vector<vector<int>>& graph, int start, int end, vector<int>& visited, int& count) {
if (start == end) {
count++;
return;
}
visited[start] = 1; // 标记当前节点为已访问
for (int i = 0; i < graph[start].size(); i++) {
int next_node = graph[start][i];
if (!visited[next_node]) { // 如果下一个节点未被访问过,则递归访问
dfs(graph, next_node, end, visited, count);
}
}
visited[start] = 0; // 回溯时取消对当前节点的访问标记
}
int countPaths(vector<vector<int>>& graph, int start, int end) {
int count = 0;
vector<int> visited(graph.size(), 0); // 初始化标记数组
dfs(graph, start, end, visited, count);
return count;
}
int main() {
vector<vector<int>> graph = { {1, 2}, {3}, {3}, {} };
int start = 0, end = 3;
cout << countPaths(graph, start, end) << endl;
return 0;
}
//输入样例:
//
//起点:0
//终点:3
//输出样例:
//
//2