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

网站和服务器的关系网站建设与管理必修

网站和服务器的关系,网站建设与管理必修,对网络平台的优化有哪些建议,重庆公章备案查询网站一:概述 Kahn 拓扑排序算法是一种基于入度的广度优先搜索方法。它通过反复选择入度为 0 的节点加入结果序列,并移除相关边、更新入度,直到所有节点处理完毕。若最后结果中节点数小于图中节点总数,则说明图中存在环,拓扑…

一:概述

        Kahn 拓扑排序算法是一种基于入度的广度优先搜索方法。它通过反复选择入度为 0 的节点加入结果序列,并移除相关边、更新入度,直到所有节点处理完毕。若最后结果中节点数小于图中节点总数,则说明图中存在环,拓扑排序失败。该算法时间复杂度为 O(V+E),既高效又能检测环,是处理任务依赖等问题的常用方法。

二:实现

#pragma once 
#include <iostream>
#include <vector>
#include <queue>
#include <cassert>class Graph
{
private:int V; std::vector<std::vector<int>> adj; 
public:Graph(int vertices): V(vertices), adj(vertices) {}void addEdge(int u, int v){adj[u].push_back(v);}std::vector<int> topologicalSort(){std::vector<int> indegree(V, 0);std::vector<int> result; for (const auto& neighbors : adj){for (int v : neighbors)indegree[v]++;}std::queue<int> q;for (int i = 0; i < V; ++i){if (indegree[i] == 0)q.push(i);}while (!q.empty()){int u = q.front();q.pop(); result.push_back(u);for (int v : adj[u]){if (--indegree[v] == 0)q.push(v);}}if (result.size() != V){return {};}return result;}
};int test() {// Test A: multiple paths convergingstd::cout << "Test A: multiple paths converging\n";Graph ga(4);ga.addEdge(0, 1);ga.addEdge(0, 2);ga.addEdge(1, 3);ga.addEdge(2, 3);auto ans_a = ga.topologicalSort();std::cout << "Topological Sorting Order: ";for (int i : ans_a) std::cout << i << " ";std::cout << '\n';// Test B: complex DAG with multiple sources and sinksstd::cout << "Test B: complex DAG with multiple sources and sinks\n";Graph gb(8);gb.addEdge(0, 1);gb.addEdge(0, 3);gb.addEdge(1, 4);gb.addEdge(3, 4);gb.addEdge(4, 6);gb.addEdge(4, 7);gb.addEdge(5, 6);auto ans_b = gb.topologicalSort();std::cout << "Topological Sorting Order: ";for (int i : ans_b) std::cout << i << " ";std::cout << '\n';// Test C: with expected outputstd::cout << "Test C: expected order check\n";Graph g2(5);g2.addEdge(0, 1);g2.addEdge(0, 2);g2.addEdge(1, 2);g2.addEdge(2, 3);g2.addEdge(1, 3);g2.addEdge(2, 4);auto ans_c = g2.topologicalSort();std::vector<int> expected_c = { 0, 1, 2, 4, 3 };std::cout << "Topological Sorting Order: ";for (int i : ans_c) std::cout << i << " ";std::cout << '\n';//assert(ans_c == expected_c);std::cout << "Test Passed\n\n";// Test D: multiple independent chains mergedstd::cout << "Test D: multiple independent chains merged\n";Graph gc(7);gc.addEdge(0, 1);gc.addEdge(1, 2);gc.addEdge(2, 3);gc.addEdge(3, 4);gc.addEdge(6, 4);gc.addEdge(5, 4);auto ans_d = gc.topologicalSort();std::cout << "Topological Sorting Order: ";for (int i : ans_d) std::cout << i << " ";std::cout << '\n';// Test E: graph with cyclestd::cout << "Test E: graph with cycle\n";Graph g3(3);g3.addEdge(0, 1);g3.addEdge(1, 2);g3.addEdge(2, 0);try {g3.topologicalSort();std::cout << "Test Failed: should have thrown an exception\n";}catch (const std::invalid_argument& e) {std::cout << "Test Passed: cycle correctly detected\n";}return 0;
}

http://www.dtcms.com/wzjs/797926.html

相关文章:

  • 邢台市住房和城乡建设局网站怎么查询最新网站
  • 购物网站 后台it外包wordpress模板
  • 如何做网站分析app网站多少钱
  • 无锡网站建设价格诸城网站建设定制
  • 分销网站建站全网型网站建设方案
  • 怎么做签到网站联科网站建设
  • 河南网站优化做电商运营有前途吗
  • 网站建设方案 doc阿里云主机怎么做两个网站吗
  • 怎么建立网站?购买模板建站
  • 厦门模板做网站品牌网站设计制作哪家好
  • 能进封禁网站的手机浏览器扁平化网页设计图片
  • 广西城乡和建设厅网站首页兰州网站建设小程序
  • 花生壳做网站昆山网站建设ikelv
  • 智慧农业网站建设网站开发及代运营
  • 吉林网站制作现在个人做网站或者app还有收益
  • 网站会员和discuz会员同步wordpress更改目录插件
  • 做网站有哪些公司好网站建设素材网
  • 南昌专门做网站的人网站做填充
  • 房山网站建设公司公司做网站的费用怎么做账
  • 网站建设需求计划书环保设备网站怎么做
  • 做养殖推广什么网站好建个平台需要多少资金
  • 怎么申请自己的网站网址网站默认样式
  • 网店网站设计一个完整网站开发需要什么技术
  • 给朋友网站做宣传怎么写磐石市住房和城乡建设局网站
  • wordpress企业仿站莱芜金点子官网
  • 怎么做一个网站页面店铺装修设计网
  • xyz溢价域名最好的网站南宁建设银行官网招聘网站
  • 视频网站开发视频科技有限公司网页设计
  • 买源码做网站简单嘛wordpress 使用技巧
  • 网站建设公司介绍wordpress在线咨询