苏州网站模板建站,windows优化大师自动下载,深圳 旅游 网站建设,erp系统有哪些软件概念 一个有向图#xff0c;如果图中有入度为 0 的点#xff0c;就把这个点删掉#xff0c;同时也删掉这个点所连的边。一直进行上面的处理#xff0c;如果所有点都能被删掉#xff0c;则这个图可以进行拓扑排序。拓扑排序是对DAG#xff08;有向无环图#xff09;上的节…概念 一个有向图如果图中有入度为 0 的点就把这个点删掉同时也删掉这个点所连的边。一直进行上面的处理如果所有点都能被删掉则这个图可以进行拓扑排序。拓扑排序是对DAG有向无环图上的节点进行排序使得对于每一条有向边u-vu 都在v之前出现。简单地说是在不破坏节点先后顺序的前提下把DAG拉成一条链。
算法过程 构造拓扑序列步骤 从图中选择一个入度为零的点。 输出该顶点从图中删除此顶点及其所有的出边。
重复上面两步直到所有顶点都输出拓扑排序完成或者图中不存在入度为零的点此时说明图是有环图拓扑排序无法完成陷入死锁。
代码框架
int n;
vectorint g[MAXN]; // 储存节点出边
int in[MAXN]; // 存储每个结点的入度
bool toposort() {vectorint l; // 排序结果queueint q;for (int i 0; i n; i){ // 入度为0的节点入队if (in[i] 0) {q.push(i);}}while (!q.empty()) {int u q.front();q.pop();l.push_back(u);for (auto v : G[u]) { // 删除与节点u直接相连的边if (--in[v] 0) { // 出现新入度为零的节点入队q.push(v);}}}return l.size() n;
}
题单
207. 课程表 - 力扣LeetCode
210. 课程表 II - 力扣LeetCode