DFS深度优先搜索代码模板
三部曲:
1.确定递归函数的参数
vector<vector<int>> result;//保存图以及所有合法路径
vector<int> path;//保存0节点到终点的路径信息
void dfs(vector<vector<int>>& graph,int x) //x是目前遍历的节点
2.确定终止条件
if(x==graph.size()-1)
{
result.push_back(path);
return;
}
3.处理当前节点的下一个节点
//graph[x].size()计算x的相邻节点的数量
for(int i=0;i<graph[x].size();i++)
{
path.push_back(graph[x][i]);
dfs(graph,graph[x][i]);
path.pop_back();
}
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
vector<vector<int>> result;//保存图以及所有合法路径
vector<int> path;//保存0节点到终点的路径信息
//x是目前遍历的节点
void dfs(vector<vector<int>>& graph,int x)
{
if(x==graph.size()-1)
{
result.push_back(path);
return;
}
//graph[x].size()计算x的相邻节点的数量
for(int i=0;i<graph[x].size();i++)
{
path.push_back(graph[x][i]);
dfs(graph,graph[x][i]);
path.pop_back();
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
//初始化graph
vector<vector<int>> graph;
graph = {{1,2},{3},{3},{}};//表示有向边0-1,0-2 ,1-3,2-3
//对graph操作
path.push_back(0);//无论什么路径已经是从0节点出发
dfs(graph,0);
//输出所有合法路径
for(int i=0;i<result.size();i++)
{
for(int j=0;j<result[i].size();j++)
{
if(j==result[i].size()-1)
{
cout << result[i][j];
}else{
cout << result[i][j] <<"->";
}
}
cout <<endl;
}
return 0;
}