自定义简单的图结构

点集

import java.util.ArrayList;//点结构的描述
public class Node {public int value;//入度public int in;//出度public int out;public ArrayList<Node> nexts;public ArrayList<Edge> edges;public Node(int value){this.value = value;in = 0;out = 0;nexts = new ArrayList<>();edges = new ArrayList<>();}
}

边集

public class Edge{public int weight;public Node from;public Node to;public Edge(int weight,Node from,Node to){this.weight = weight;this.from = from;this.to = to;}
}

图集

import java.util.HashMap;
import java.util.HashSet;public class Graph {public HashMap<Integer,Node> nodes;public HashSet<Edge> edges;public Graph(){nodes = new HashMap<>();edges = new HashSet<>();}
}

其他问题转化为此自定义结构的接口

public class GraphGenerator {public static Graph createGraph(Integer[][] matrix){Graph graph = new Graph();for(int i=0;i<matrix.length;i++){Integer weight = matrix[i][0];Integer from = matrix[i][1];Integer to = matrix[i][2];if(!graph.nodes.containsKey(from)){graph.nodes.put(from,new Node(from));}if(!graph.nodes.containsKey(to)){graph.nodes.put(to,new Node(to));}Node fromNode = graph.nodes.get(from);Node toNode = graph.nodes.get(to);Edge newEdge = new Edge(weight,fromNode,toNode);fromNode.nexts.add(toNode);fromNode.out++;toNode.in++;fromNode.edges.add(newEdge);graph.edges.add(newEdge);}return graph;}}

广度优先

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;public class BFS {public static void bfs(Node node){if(node == null){return;}Queue<Node> queue = new LinkedList<>();HashSet<Node> set = new HashSet<>();queue.add(node);set.add(node);while (!queue.isEmpty()){Node cur = queue.poll();System.out.println(cur.value);for(Node next : cur.nexts){if(!set.contains(next)){set.add(next);queue.add(next);}}}}
}

深度优先

import java.util.HashSet;
import java.util.Stack;public class DFS {public static void dfs(Node node){if(node == null){return;}Stack<Node> stack = new Stack<>();HashSet<Node> set = new HashSet<>();stack.add(node);set.add(node);System.out.println(node.value);while (!stack.isEmpty()){Node cur = stack.pop();for(Node next : cur.nexts){if(!set.contains(next)){stack.push(cur);stack.push(next);set.add(next);System.out.println(next.value);break;}}}}
}

拓扑排序

import java.util.*;public class TopologySort {public static List<Node> sortedTopology(Graph graph){HashMap<Node,Integer> inMap = new HashMap<>();//只有入度为0的点才能进入队列Queue<Node> zeroInQueue = new LinkedList<>();for(Node node : graph.nodes.values()){inMap.put(node, node.in);if(node.in == 0){zeroInQueue.add(node);}}//拓扑排序的结果,依次加入resultList<Node> result = new ArrayList<>();while (!zeroInQueue.isEmpty()){Node cur = zeroInQueue.poll();result.add(cur);for(Node next : cur.nexts){inMap.put(next,inMap.get(next)-1);if(inMap.get(next) == 0){zeroInQueue.add(next);}}}return result;}
}

【数据结构的魅力】008.图相关推荐

  1. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  2. python define graph_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  3. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

  4. 特征图注意力_从数据结构到算法:图网络方法初探

    作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...

  5. 【数据结构】数据结构知识思维导图

    From:https://blog.csdn.net/flowing_wind/article/details/81431354 思维导图源文件: 链接:https://pan.baidu.com/s ...

  6. 数据结构与算法之-----图(拓扑排序)

    [​​​​​​​ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据 ...

  7. 数据结构与算法之-----图(搜索算法)

    [ 写在前面的话:本专栏的主要内容:数据结构与算法. 1.对于​​​​​​​初识数据结构的小伙伴们,鉴于后面的数据结构的构建会使用到专栏前面的内容,包括具体数据结构的应用,所使用到的数据结构,也是自己 ...

  8. 数据结构(19)图的最小生成树算法

    数据结构(19)图的最小生成树算法 前言 普里姆(Prim)算法 克鲁斯卡尔(Kruskal)算法 代码 GraphMtx.h GraphMtx.c Main.c 前言 在有n个顶点的图中,要连接所有 ...

  9. 天勤2022数据结构(六)图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 天勤2022数据结构(六)图 前言 一.基础算法 例题 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 拓扑排 ...

  10. 【王道数据结构】思维导图--5.2二叉树的概念(高清)

    目录:[数据结构]思维导图–(超全大汇总) 上一张:[王道数据结构]思维导图–5.1树与二叉树(高清) 下一张:[王道数据结构]思维导图–5.3二叉树的前中后序遍历和线索二叉树的构造步骤(高清)

最新文章

  1. 原生JavaScript实现字符串长度截取
  2. java聚合excel_java操作excel
  3. wince 自带的web server
  4. LeetCode 404. Sum of Left Leaves
  5. 《Java编程思想》Java I/O系统章节阅读笔记
  6. Sentinel服务熔断配置fallback和blockHandler_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0052
  7. Linux 基本命令(九)--vim 常用命令
  8. JS打印对象的方法将Object转换为String的函数
  9. 网易互娱-后台开发(支付方向)二面
  10. 性能优化实战-sql递归查询效率低下
  11. android 圆形图片,(Android)处理图片成圆形
  12. 撤消 git rebase
  13. 深入分析Voldemort的PerformParallelRequests
  14. 微信扫码点餐小程序怎么做,一步步教你
  15. Linux系统轻量级监控工具Linux dash的安装方法
  16. 计算机画图怎么画荷花图片简笔画,画荷花最简单的画法 荷花画图片简单画法...
  17. 双精度浮点数的取绝对值
  18. 【python 处理亿级数据】使用 Pandas 处理亿级数据
  19. laravel db类
  20. [渝粤教育] 辽宁对外经贸学院 数字新技术 参考 资料

热门文章

  1. [Vue warn]: Duplicate keys detected: '0'. This may cause an update error. found in解决办法
  2. DHCP配置 TFTP服务
  3. 构建大型 Mobx 应用的几个建议
  4. js原生方式实现bind方法
  5. 阿里Java开发手册思考(二)
  6. Android JNI(实现自己的JNI_OnLoad函数)
  7. F1-VmwareCentOS7.x
  8. Youtube Links
  9. matlab hopty,运行Matlab时出现错误?Attempted to access rxd(500); index out of bou
  10. web服务启动后mysql崩溃_让Web站点崩溃最常见的七大原因