#include<bits/stdc++.h>
#define maxn 100
#define INF 0x3f3f3f
using namespace std;
int m,n,ans[maxn],indegree[maxn],vis[maxn],g[maxn][maxn];
void dfs(int depth){
if(m==depth-1){
for(int i=1;i<=m;i++){
cout<<ans[i]<<" ";
}
cout<<endl;
}
for(int i=1;i<=m;i++){
if(!vis[i]&&indegree[i]==0){
vis[i]=1;
ans[depth]=i;
for(int j=1;j<=m;j++){
if(g[i][j]==1){
indegree[j]--;
}
}
dfs(depth+1);
vis[i]=0;
for(int j=1;j<=m;j++){
if(g[i][j]==1){
indegree[j]++;
}
}
}
}
}
int main(){
cin>>m>>n;
for(int i=0;i<n;i++){
int v1,v2;
cin>>v1>>v2;
indegree[v2]++;
g[v1][v2]=1;
}
dfs(1);
return 0;
}
输出所有的拓扑排序(dfs)
最新推荐文章于 2024-08-07 09:56:18 发布
这篇文章介绍了如何使用C++实现深度优先搜索(DFS),用于解决图的遍历问题。通过递归方式,代码展示了如何从特定节点开始,寻找并标记所有可达节点,最终输出路径。关键概念包括邻接矩阵、入度数组、vis数组和indegree数组的运用。
摘要由CSDN通过智能技术生成