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

影视网站怎么做免费网站推广网址

影视网站怎么做,免费网站推广网址,做电商网站需要的证,做信息网站要办icp证吗拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图,图节点的拓扑排序定义如下: 对…

拓扑排序

  • 拓扑排序-lintcode原题
  • 题目介绍
  • 解题思路
  • 代码演示
  • 解题方法二 (参考,不用掌握)
  • 前置知识 图的拓扑序和深度优先遍历和广度优先遍历

拓扑排序-lintcode原题

127.拓扑排序-原题链接,可以点进去测试

题目介绍

描述
给定一个有向图,图节点的拓扑排序定义如下:
对于图中的每一条有向边 A -> B , 在拓扑排序中A一定在B之前.
拓扑排序中的第一个节点可以是图中的任何一个没有其他节点指向它的节点.
针对给定的有向图找到任意一种拓扑排序的顺序.

样例:
输入:
graph = {0,1,2,3#1,4#2,4,5#3,4,5#4#5}
输出:
[0, 1, 2, 3, 4, 5]
解释:
在这里插入图片描述
拓扑排序可以为:
[0, 1, 2, 3, 4, 5]
[0, 2, 3, 1, 5, 4]

您只需要返回给定图的任何一种拓扑顺序。

解题思路

我们用图的深度优先遍历去解决这个题.
由于拓扑序不唯一,但我们可以定一个标准,深度越深的节点,拓扑序越靠前.
我们用深度优先遍历,把图节点的深度都拿到,保存在一个表中,
我们再根据深度去排序,就得到递归序了,我们上代码演示.

代码演示

1.lintcode 提供的图结构

 public static class DirectedGraphNode {public int label;public ArrayList<DirectedGraphNode> neighbors;public DirectedGraphNode(int x) {label = x;neighbors = new ArrayList<DirectedGraphNode>();}}
  1. 下面代码可以直接复制进去测试
 /*** 拓扑序* @param graph* @return*/public static ArrayList<DirectedGraphNode> topSort(ArrayList<DirectedGraphNode> graph) {HashMap<DirectedGraphNode, Record> order = new HashMap<>();//拿到每个点的深度for (DirectedGraphNode node : graph){process(node,order);}//排序好的节点放进集合中  方便排序ArrayList<Record> records = new ArrayList<>();for (Record record : order.values()){records.add(record);}//使用自定义比较器去排序records.sort(new MyComparator());ArrayList<DirectedGraphNode> ans = new ArrayList<>();for (Record re : records){ans.add(re.node);}return ans;}/*** 记录每个几点的最大深度*/public static class Record{//节点DirectedGraphNode node;//深度int deep;public Record(DirectedGraphNode node, int deep) {this.node = node;this.deep = deep;}}/*** 自定义比较器,深度越深的,就排在前面.*/public static class MyComparator implements Comparator<Record>{@Overridepublic int compare(Record o1, Record o2) {return o2.deep - o1.deep;}}/*** 递归去记录每个节点的最大深度* @param node* @return*/public static Record process(DirectedGraphNode node, HashMap<DirectedGraphNode,Record>orders){//记忆化搜索,记录每次的结果,如果已经有了就直接拿结果返回.if (orders.containsKey(node)){return orders.get(node);}int deep = 0;//拿到节点最大深度for (DirectedGraphNode cur : node.neighbors){deep = Math.max(deep,process(cur,orders).deep);}Record record = new Record(node, deep + 1);orders.put(node,record);return record;}

解题方法二 (参考,不用掌握)

思路:
和方法一类似,在递归的过程中,我们不计算最大深度了,我们拿到每个点下面出现了多少次别的点.
出现点次越多的,我们认为拓扑序越靠前.
举例:
如果a点后面还有五个点,b 后面有四个点,我们认为a 的拓扑序更靠前/

直接代码展示,可以提交测试.

 /*** 排序.* @param graph* @return*/public static ArrayList<DirectedGraphNode> topSort(ArrayList<DirectedGraphNode> graph){HashMap<DirectedGraphNode, Record> map = new HashMap<>();for (DirectedGraphNode node : graph){process(node, map);}ArrayList<Record> records = new ArrayList<>();for (Record re : map.values()){records.add(re);}records.sort(new MyComparator());ArrayList<DirectedGraphNode> directedGraphNodes = new ArrayList<>();for (Record record : records){directedGraphNodes.add(record.node);}return directedGraphNodes;}/*** 记录每个点在深度遍历时 后面点出现的点次的概念*/public static class Record{public DirectedGraphNode node;public long nodes;public Record(DirectedGraphNode node, long nodes) {this.node = node;this.nodes = nodes;}}public static class MyComparator implements Comparator<Record>{@Overridepublic int compare(Record o1, Record o2) {return o1.nodes == o2.nodes ? 0 : (o1.nodes > o2.nodes ? -1 : 1);}}/*** 递归算法 计算每个点出现的点次* @param node* @param records* @return*/public static Record process(DirectedGraphNode node, HashMap<DirectedGraphNode,Record> records){if (records.containsKey(node)){return records.get(node);}long nodes = 0;for (DirectedGraphNode cur : node.neighbors){nodes += process(cur,records).nodes;}Record record = new Record(node, nodes + 1);records.put(node,record);return record;}

前置知识 图的拓扑序和深度优先遍历和广度优先遍历

图的拓扑排序(java)

图的深度优先遍历和广度优先遍历(java)

图结构-图的数据表示法(java)

http://www.hkea.cn/news/653138/

相关文章:

  • 个人网站做导航网站项目推广平台有哪些
  • 威海住房建设局网站培训学校资质办理条件
  • 做趣味图形的网站免费线上培训平台
  • 女生做网站前端设计师成都网站seo
  • 濮阳建设银行官方网站搜索引擎优化的对比
  • 完全删除wordpressseo小白入门
  • 做网站常用到的css标签什么软件可以找客户资源
  • 有做销售产品的网站有哪些新闻头条今日新闻
  • 深圳自己做网站 服务器优化的近义词
  • 网站开发职业工资网站推广上首页
  • 宝安附近公司做网站建设多少钱深圳百度开户
  • 成都紧急通知seo网络营销招聘
  • 思坎普网站建设如何做营销推广
  • 太原网站优化公司有域名和服务器怎么建网站
  • 网站策划的前景seo 推广
  • wordpress导入网站文章怎么联系百度人工客服
  • 制冷机电工程东莞网站建设简阳seo排名优化培训
  • 北京网站建设 网站维护服装营销方式和手段
  • 唐山高端网站建设开发新客户的十大渠道
  • 小地方的旅游网站怎么建设seo教程有什么
  • 做网站教程宁波百度seo点击软件
  • asp.net个人网站北京专门做seo
  • 石家庄java开发做网站百度资源站长平台
  • 有哪些网站系统网络营销首先要进行
  • 网站建设硬件设置竞价广告是怎么推广的
  • 网站的平面设计图用ps做国外搜索引擎大全百鸣
  • 深圳专业企业网站建设前端培训
  • 南京平台公司seo搜索培训
  • 横沥网站建设武汉百度百科
  • 百度给做网站公司线上运营的5个步骤