我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java数据结构图的领接矩阵举例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java数据结构图的领接矩阵举例分析

本篇内容介绍了“Java数据结构图的领接矩阵举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.图的领接矩阵(Adjacency Matrix)存储结构

图的领接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一位数组存储图中顶点信息,一个二维数组(称为领接矩阵)存储图中的边或弧的信息。

举例

无向图

Java数据结构图的领接矩阵举例分析

无向图的领接矩阵的第i行或第i列的非零元素个数正好是第i个顶点的度。

有向图

Java数据结构图的领接矩阵举例分析

有向图的领接矩阵的第i行的非零元素个数正好是第i个顶点的出度,第i列的非零元素个数正好是第i个顶点的入度。

带权值的网图

Java数据结构图的领接矩阵举例分析

2.图的接口类

Java数据结构图的领接矩阵举例分析

3.图的类型,用枚举类表示

public enum GraphKind {    UDG,DG,UDN,DN;//无向图、有向图、无向网、有向网}

4.图的领接矩阵描述

对于一个具有n个顶点的图G,可以将图G的领接矩阵存储在一个二维数组中.

package Graph;import java.util.Scanner; public class MyGraph implements IGraph {    public final static int INFINITY = Integer.MAX_VALUE;    private GraphKind kind;             //图的标志    private int vexNum, arcNum;          //图当前顶点和边数    private Object[] vexs;              //顶点    private int[][] arcs;               //邻接矩阵     public MyGraph() {                  //空参构造        this(null, 0, 0, null, null);    }     public MyGraph(GraphKind kind, int vexNum, int arcNum, Object[] vexs, int[][] arcs) {   // 实参构造        this.kind = kind;        this.vexNum = vexNum;        this.arcNum = arcNum;        this.vexs = vexs;        this.arcs = arcs;    }     @Override    public void createGraph() {               //创建新图        Scanner sc = new Scanner(System.in);        System.out.println("请输入图的类型:");        GraphKind kind = GraphKind.valueOf(sc.next());        switch (kind) {            case UDG:                createUDG();                return;            case DG:                createDG();                return;            case UDN:                createUDG();                return;            case DN:                createDN();                return;         }    }     private void createUDG() {       //创建无向图        Scanner sc = new Scanner(System.in);        System.out.println("请输入图的顶点数、图的边数:");        vexNum = sc.nextInt();        arcNum = sc.nextInt();        vexs = new Object[vexNum];        System.out.println("请分别输入图的各个顶点");        for (int v = 0; v < vexNum; v++)                //构造顶点函数            vexs[v] = sc.next();        arcs = new int[vexNum][vexNum];        for (int v = 0; v < vexNum; v++)            for (int u = 0; u < vexNum; u++)                arcs[v][u] = INFINITY;              //初始化领接矩阵        System.out.println("请输入各个边的两个顶点及其权值:");        for (int k = 0; k < arcNum; k++) {            int v = locateVex(sc.next());            int u = locateVex(sc.next());            arcs[v][u] = arcs[v][u] = sc.nextInt();        }    }    private void createDG() {       //创建有向图    }    ;     private void createUDN() {       //创建无向网     }    private void createDN() {           //创建有向网        Scanner sc = new Scanner(System.in);        System.out.println("请输入图的顶点数、图的边数:");        vexNum = sc.nextInt();        arcNum = sc.nextInt();        vexs = new Object[vexNum];        System.out.println("请分别输入图的各个顶点");        for (int v = 0; v < vexNum; v++)                //构造顶点函数            vexs[v] = sc.next();        arcs = new int[vexNum][vexNum];        for (int v = 0; v < vexNum; v++)            for (int u = 0; u < vexNum; u++)                arcs[v][u] = INFINITY;              //初始化领接矩阵        System.out.println("请输入各个边的两个顶点及其权值:");        for (int k = 0; k < arcNum; k++) {            int v = locateVex(sc.next());            int u = locateVex(sc.next());            arcs[v][u] = sc.nextInt();        }    }    @Override    public int getVexNum() {        return vexNum;   //返回顶点数    }     @Override    public int getArcNum() {        return arcNum;      //返回边数    }     @Override              //返回v的第一个领接点,若v没有领接点返回-1;    public Object getVex(int v) throws Exception {        if (v < 0 && v >= vexNum)            throw new Exception("第" + v + "个顶点不存在!");        return vexs[v];          <0v<vexNum    }     @Override    public int locateVex(Object vex) {          //顶点定位法         for (int v = 0; v < vexNum; v++)            if (vexs[v].equals(vex))                return v;        return 0;    }     @Override                                public int firstAdjVex(int v) throws Exception {   //查找第一个领接点        if (v < 0 && v >= vexNum)            throw new Exception("第" + v + "个顶点不存在!");        for (int j = 0; j < vexNum; j++)            if (arcs[v][j] != 0 && arcs[v][j] < INFINITY)                return j;                return -1;    }         @Override    public int nextAdjvex(int v, int w) {         //查找下一个领接点        return 0;    }    public GraphKind getKind(){                   //返回图标类型        return kind;    }       public int[][] getArcs() {              //返回邻接矩阵的值        return arcs;    }                                             //返回顶点    public Object[] getVexs() {        return vexs;    }}

测试类

public static void main(String[] args) throws Exception {        MyGraph M=new MyGraph();                                //创建图空间        M.createGraph();        System.out.println("创建无向网的顶点个数为:"+M.getVexNum());        System.out.println("创建无向网的边个数为:"+M.getArcNum());        System.out.println("请输入要查找顶点的值:");        Scanner sc=new Scanner(System.in);                          Object top=sc.next();        System.out.println("要查找顶点"+top+"的值为:"+ M.locateVex(top));        System.out.println("请输入要查找顶点的索引:");        int x= sc.nextInt();        System.out.println("要查找位置"+x+"处的顶点值为:"+M.getVex(x) );        System.out.println("请输入邻接点的顶点的位置:");        int n= sc.nextInt();        System.out.println("要查找位置"+n+"处的顶点值为:"+M.firstAdjVex(n) );    }}

“Java数据结构图的领接矩阵举例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java数据结构图的领接矩阵举例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java数据结构图的领接矩阵举例分析

本篇内容介绍了“Java数据结构图的领接矩阵举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.图的领接矩阵(Adjacency Ma
2023-06-21

Java数据结构中图的示例分析

这篇文章给大家分享的是有关Java数据结构中图的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。有向图有向图的定义及相关术语定义∶ 有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的
2023-06-29

Java中数据结构的示例分析

这篇文章将为大家详细讲解有关Java中数据结构的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.1.1. 增量内存分配 ArrayList 、 HashMap 、 Vector 等类
2023-06-03

PHP数据结构之图存储结构的示例分析

这篇文章主要介绍PHP数据结构之图存储结构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!图的存储结构图的概念介绍得差不多了,大家可以消化消化再继续学习后面的内容。如果没有什么问题的话,我们就继续学习接下来的
2023-06-20

java数据结构之树的示例分析

这篇文章主要介绍java数据结构之树的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!树定义和基本术语定义树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件:(1)有且仅有一个特定的称为根
2023-05-30

Java数据结构与算法的示例分析

这篇文章给大家分享的是有关Java数据结构与算法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。第1章 数据结构与算法基础概述1.1 数据结构和算法的重要性算法是程序的灵魂,优秀的程序可以在海量数据计算时
2023-06-29

Java数据结构之链表的示例分析

小编给大家分享一下Java数据结构之链表的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、链表的介绍什么是链表链表是一种物理存储单元上非连续、非顺序的存
2023-06-15

PHP数据结构中图遍历的示例分析

这篇文章将为大家详细讲解有关PHP数据结构中图遍历的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图的遍历:深度优先与广度优先树的遍历演化到图的遍历还记得在树的学习中,我们讲到过先序、中序、后序以
2023-06-20

Java数据结构之红黑树的示例分析

小编给大家分享一下Java数据结构之红黑树的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、红黑树所处数据结构的位置:在JDK源码中, 有treeMap
2023-05-30

Java集合中基本数据结构的示例分析

这篇文章主要介绍Java集合中基本数据结构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!集合中三大数据结构数组内存地址连续可以通过下标的成员访问,下标访问的性能高增删操作有较大的性能消耗(需要动态扩容)链表
2023-06-15

java数据结构之二分查找法binarySearch的示例分析

这篇文章给大家分享的是有关java数据结构之二分查找法binarySearch的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java数据结构之二分查找法 binarySearch的实例折半查找法,前提是
2023-05-31

Java数据结构和算法之链表的示例分析

这篇文章主要介绍Java数据结构和算法之链表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、链表(Linked List)链表通常由一连串节点组成,每个节点包含任意的实例数据(data fields)和一
2023-06-28

PHP数据结构-图的应用:最短路径的示例分析

这篇文章主要介绍了PHP数据结构-图的应用:最短路径的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是最短路径今天我们学习的是图的应用中另外一个经典的问题,也就是
2023-06-20

Java数据结构之实现哈夫曼树的示例分析

这篇文章主要介绍了Java数据结构之实现哈夫曼树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、与哈夫曼树相关的概念概念含义1. 路径从树中一个结点到另一个结点的
2023-06-15

基于Java的数据库结构维护工具Dzo 3.0的示例分析

基于Java的数据库结构维护工具Dzo 3.0的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Dzo 是一个数据库的小工具,用以帮助维护不同的数据库结构,当前支持 My
2023-06-17

Java数据结构和算法之前缀、中缀和后缀表达式的示例分析

小编给大家分享一下Java数据结构和算法之前缀、中缀和后缀表达式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、人如何解析算术表达式如何解析算术表达式?或者换种说法,遇到某个算术表达式,我们是如何计算的:①、求
2023-06-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录