图算法--拓扑序列
复制代码
 1 #include<cstring>
 2 #include<iostream>
 3 using namespace std;
 4 int n,m;
 5 const int N=1e5+10;
 6 int h[N],e[N],ne[N],idx;
 7 int q[N],d[N];
 8 void add(int a,int b){
 9     e[idx]=b,ne[idx]=h[a],h[a]=idx++;
10 }
11 bool topsort(){
12     int hh=0,tt=-1;
13     for(int i=1;i<=n;i++){
14         if(d[i]==0){
15             q[++tt]=i;
16         }
17     }
18     while(hh<=tt){
19         int t=q[hh++];
20         for(int i=h[t];i!=-1;i=ne[i]){
21             int j=e[i];
22             d[j]--;
23             if(d[j]==0){
24                 q[++tt]=j;
25             }
26         }
27     }
28     return tt==n-1;
29 }
30 int main(void){
31     memset(h,-1,sizeof h);
32     cin>>n>>m;
33     for(int i=0;i<m;i++){
34         int a,b;
35         cin>>a>>b;
36         add(a,b);
37         d[b]++;
38     }
39     if(topsort()){
40         for(int i=0;i<n;i++){
41             cout<<q[i]<<" ";
42         }
43         puts("");
44     }else{
45         puts("-1");
46     }
47     return 0;
48 }
复制代码

 

posted on   greenofyu  阅读(172)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示