LeetCode 797. 所有可能的路径
Posted Blocking The Sky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 797. 所有可能的路径相关的知识,希望对你有一定的参考价值。
给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。
译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。
class Solution
public:
bool visited[20];
void init()
for(int i=0;i<20;i++)
visited[i]=false;
int firstarc(vector<vector<int>>& graph,int v)//返回v相邻的第一个结点
int p=-1;
if(graph[v].size()>0)//如果与v相邻有结点则返回第一个结点,没有返回-1
p=graph[v][0];
return p;
int nextarc(vector<vector<int>>& graph,int v,int p)
for(int i=0;i<graph[v].size();i++)//如果v结点相邻的结点p不是最后一个,则返回下一个结点
if(graph[v][i]==p&&i<graph[v].size()-1)
return graph[v][i+1];
return -1; //如果v结点相邻的结点p是最后一个,则返回-1;
vector<vector<int>> result;
void find_path(vector<vector<int>>& graph,int start,int end,vector<int>& path)
path.push_back(start);
visited[start]=true;
if(start==end)//找到一条路径则输出
result.push_back(path);
int p;
p=firstarc(graph, start);//找到start第一个相邻结点
while(p>=0)
if(visited[p]==false)//如果顶点p未访问,递归访问它
find_path(graph,p,end,path);
p=nextarc(graph,start,p);//p指向start的下一个相邻结点
path.pop_back();
visited[start]=false;//恢复环境,使该节点可重新使用
vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph)
vector<int> path;
init();
find_path(graph,0,graph.size()-1,path);//dfs搜索所有路径
return result;
;
以上是关于LeetCode 797. 所有可能的路径的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 797. 所有可能的路径(dfs) / 881. 救生艇(双指针,贪心) / 295. 数据流的中位数(对顶堆)
LeetCode Algorithm 797. 所有可能的路径