标签:结点 int Vi Vj start vector graph path 顶点
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搜索所有路径,此处0到n-1的所有简单路径
return result;
}
};
标签:结点,int,Vi,Vj,start,vector,graph,path,顶点 来源: https://blog.csdn.net/weixin_44925547/article/details/120396132
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。