美文网首页算法
图的基本结构

图的基本结构

作者: 一凡呀 | 来源:发表于2017-11-27 20:33 被阅读0次

概念:

(1)图是由顶点集合以及顶点间的关系集合组成的一种数据结构。

Graph = (V,E) V是顶点的有穷非空集合;E是顶点之间关系的有穷集合,也叫边集合。

(2)有向图:顶点对<x,y>是有序的;无向图:顶点对<x,y>是无序的。

(3)无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边,用无序偶对(Vi,Vj)来表示。

(4)完全无向图:若有n个顶点的无向图有n(n-1)/2 条边, 则此图为完全无向图。

完全有向图:有n个顶点的有向图有n(n-1)条边, 则此图为完全有向图。

(5)树中根节点到任意节点的路径是唯一的,但是图中顶点与顶点之间的路径却不是唯一的。

路径的长度是路径上的边或弧的数目。

(6)如果对于图中任意两个顶点都是连通的,则成G是连通图。

(7)图按照边或弧的多少分稀疏图和稠密图。 如果任意两个顶点之间都存在边叫完全图,有向的叫有向图。

若无重复的边或顶点到自身的边则叫简单图。

(8)图中顶点之间有邻接点。无向图顶点的边数叫做度。有向图顶点分为入度和出度。

(9)图上的边和弧上带权则称为网。

(10)有向的连通图称为强连通图。

结构实现代码:

点:

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;
    }


图:

public class Graph {
        //存储点集,Integer标识用
    public HashMap<Integer,Node> nodes;
    public HashSet<Edge> edges;

    public Graph() {
        nodes = new HashMap<>();
        edges = new HashSet<>();
    }
}


建立图:

思路:

建立一个图,题目通常会给你一个二维数组,例如如下这种,第一个元素表示from,第二个表示to,第三个元素表示权重

[1,2,50]
[2,3,100]
[4,3,40]

给定这个二维数组后,让你建立图
循环数组的第一维,如果图中没有from to 等就加入,然后加入边,入度出度等信息,就可以建立出一个图

代码:
public static Graph createGraph(Integer[][] matrix) {
        Graph graph = new Graph();
        for (int i = 0; i < matrix.length; i++) {
            Integer from = matrix[i][0];
            Integer to = matrix[i][1];
            Integer weight = 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;
    }

相关文章

  • 图的基本结构

    概念: (1)图是由顶点集合以及顶点间的关系集合组成的一种数据结构。 Graph = (V,E) V是顶点的有穷...

  • 第四章:程序的控制结构

    程序的流程图 a程序的基本结构 程序由三种基本结构组成: 顺序结构 分支结构 循环结构 这些基本结构都有一个入口和...

  • 概念模型设计

    概念结构设计- E-R图方法 实体关系图:简记E-R图,是指以实体、关系、属性三个基本概念概括数据的基本结构,从而...

  • Python初学(十一)

    前面几章说了下python的基本数据类型,接下来要说的是程序的控制结构。 知识导图 程序的基本结构 程序的流程图:...

  • 3. 通过编码方式实现基于 WCF 服务的 HelloWorld

    项目基本结构 图 1 的 Client 工程对应图 2 的 Client App。图 1 的 HelloWorld...

  • [源码和文档分享]基于C语言的图的基本操作的实现

    1 问题描述 在主程序中建立一个菜单,实现图的基本操作 2 基本要求 图的基本操作,包括: 建立图的存储结构 实现...

  • Java 与图

    图的基本概念 图是什么,图是一种数据结构,一种非线性结构,所谓的非线性结构,浅显地理解的话,就是图的存储不是像链表...

  • 数据结构-图

    数据结构 - 图 目录: 基本概念无向图有向图 储存结构邻接矩阵邻接表十字链表(有向图)邻接多重表(无向图) 图的...

  • 大厂Android面试题汇总(三)数据结构

    常用数据结构简介数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构。1,集合结构:...

  • 数据结构:图

    图的基本概念 图的定义 图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点...

网友评论

    本文标题:图的基本结构

    本文链接:https://www.haomeiwen.com/subject/ucfjbxtx.html