#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)
最新推荐文章于 2023-08-23 20:22:40 发布