当前位置: 首页 > news >正文

搜索与图论-拓扑序列

为什么记录呢
因为不记录全忘了
虽然记了也不一定会看

  1. 有向无环图一定有拓扑序列
  2. 邮箱无环图 - 拓扑图
  1. 入度为0的点作为起点
  2. 入度为0的点入队列
  3. 枚举出边 t->j
  4. 删掉当前边,t->j . j的入度减1
  5. 判断j的入度是否为0,来判断是否加入队列
  1. 有环: 不存在入度为0的点
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>using namespace std;const int maxn = 100010;int h[maxn], e[maxn], ne[maxn], idx;int q[maxn],d[maxn];int n;int hh = 0, tt = -1;void add(int a, int b){e[idx] = b;ne[idx] = h[a];h[a] = idx++;
}bool topsort(){while(hh <= tt){int t = q[hh++];for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];d[j]--;if(d[j] == 0){q[++tt] = j;// cout<<"j: "<< j << " "; }}}// cout<<"tt " << tt << "n-1 "<< n-1 << '\n';return tt == n-1;}int main(){int m,a,b;memset(h , -1, sizeof h);cin >> n >> m;for(int i = 0; i < m; i++){cin>>a>>b;add(a,b);// cout<<"b  "<< b << " ";d[b]++;}for(int i = 1; i <= n; i++){if(d[i] == 0){// cout<<"i: " << i<<'\n';q[++tt] = i;}}if(topsort()){for(int i = 0; i < n; i++){cout<<q[i] << " ";}}else cout<<-1<< '\n';return 0;
}
http://www.lryc.cn/news/150554.html

相关文章:

  • 「MySQL-05」MySQL Workbench的下载和使用
  • 编译期jni类型转换成字符串
  • 优秀的ui设计作品(合集)
  • 【c/c++】c和cpp混合编译
  • springboot定制banner
  • Qt 入门实战教程(目录)
  • Ceph入门到精通-Lunix性能分析工具汇总
  • 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写的参考笔记
  • 【考研数学】线性代数第四章 —— 线性方程组(2,线性方程组的通解 | 理论延伸)
  • go读取文件的几种方法
  • ChatGPT癌症治疗“困难重重”,真假混讲难辨真假,准确有待提高
  • docker打包vue vite前端项目
  • zookeeper 查询注册的 dubbo 服务
  • 【每日一题】57. 插入区间
  • youtubu视频下载和yt-dlp 使用教程
  • ——滑动窗口
  • 【C++进阶】模板进阶
  • Vim如何清空文件
  • 问道管理:什么信号?煤飞色舞钢花溅
  • C# PaddleDetection yolo 印章检测
  • 常用框架分析(7)-Flutter
  • 清空 Docker 容器的日志文件
  • 01-虚拟机安装Windows Server操作系统
  • 应用案例 | 基于三维机器视觉的机器人麻袋拆垛应用解决方案
  • 1018 Public Bike Management 结题记录(dfs剪枝)
  • C++ deque底层原理
  • 打破对ChatGPT的依赖以及如何应对ChatGPT的错误和幻觉
  • 【git】【IDEA】在idea中使用git
  • 【设计模式】装饰者模式
  • open cv快速入门系列---数字图像基础