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

Java如何用邻接矩阵存储图

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Java如何用邻接矩阵存储图

这篇“Java如何用邻接矩阵存储图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何用邻接矩阵存储图”文章吧。

    一、点睛

    邻接矩阵通常采用一个一维数组存储图中节点的信息,采用一个二维数组存储图中节点之间的邻接关系。

    邻接矩阵可以用来表示无向图、有向图和网。

    1.无向图的邻接矩阵

    在无向图中,若从节点 Vi 到节点 Vj 有边,则邻接矩阵 M[i][j] = M[j][i ]= 1,否则 M[i][j] = 0。

    无向图的邻接矩阵的特定如下。

    a 无向图的邻接矩阵是对称矩阵,并且是唯一的。

    b 第 I 行或第 i 列非零的个数正好是第 i 个节点的度。

    2.有向图的邻接矩阵

    在有向图中,若从节点 Vi 到节点 Vj 有边,则邻接矩阵 M[i][j]=1,否则 M[i][j]=0 。

    有向图的邻接矩阵的特定如下。

    a 有向图的邻接矩阵不一定是对称的。

    b 第 i 行非零元素的个数正好是第 i 个节点的出度,第 i 列非零元素的个数正好是第 i 个节点的入度。

    3.网的邻接矩阵

    网是带权图,需要存储边的权值,则邻接矩阵表示为:M[i][j] = Wij,其他情况为无穷大。

    二、算法步骤

    1 输入节点数和边数。

    2 依次输入节点信息,将其存储到节点数组 Vex[] 中。

    3 初始化邻接矩阵,如果是图,则将其初始化为0,如果是网,则将其初始化为无穷大。

    4 依次输入每条边依附的两个节点,如果是网,则还需要输入该边的权值。

    • 如果是无向图,则输入a,b,查询节点a、b在节点数组 Vex[] 中的存储下标 i、j,让 Edge[i][j]=Edge[j][i]=1。

    • 如果是有向图,则输入a,b,查询节点a、b在节点数组 Vex[] 中的存储下标 i、j,让 Edge[i][j]=1。

    • 如果是无向网,则输入a,b,w,查询节点a、b在节点数组 Vex[] 中的存储下标 i、j,让 Edge[i][j]=Edge[j][i]=w。

    • 如果是有向网,则输入a,b,w,查询节点a、b在节点数组 Vex[] 中的存储下标 i、j,让 Edge[i][j]=w。

    三、实现

    package graph; import java.util.Scanner; public class CreateAMGraph {    static final int MaxVnum = 100;  // 顶点数最大值     static int locatevex(AMGraph G, char x) {        for (int i = 0; i < G.vexnum; i++) // 查找顶点信息的下标            if (x == G.Vex[i])                return i;        return -1; // 没找到    }     static void CreateAMGraph(AMGraph G) {        Scanner scanner = new Scanner(System.in);        int i, j;        char u, v;        System.out.println("请输入顶点数:");        G.vexnum = scanner.nextInt();        System.out.println("请输入边数:");        G.edgenum = scanner.nextInt();        System.out.println("请输入顶点信息:");         // 输入顶点信息,存入顶点信息数组        for (int k = 0; k < G.vexnum; k++) {            G.Vex[k] = scanner.next().charAt(0);        }        //初始化邻接矩阵所有值为0,如果是网,则初始化邻接矩阵为无穷大        for (int m = 0; m < G.vexnum; m++)            for (int n = 0; n < G.vexnum; n++)                G.Edge[m][n] = 0;         System.out.println("请输入每条边依附的两个顶点:");        while (G.edgenum-- > 0) {            u = scanner.next().charAt(0);            v = scanner.next().charAt(0);             i = locatevex(G, u);// 查找顶点 u 的存储下标            j = locatevex(G, v);// 查找顶点 v 的存储下标            if (i != -1 && j != -1)                G.Edge[i][j] = G.Edge[j][i] = 1; //邻接矩阵储置1            else {                System.out.println("输入顶点信息错!请重新输入!");                G.edgenum++; // 本次输入不算            }        }    }     static void print(AMGraph G) { // 输出邻接矩阵        System.out.println("图的邻接矩阵为:");        for (int i = 0; i < G.vexnum; i++) {            for (int j = 0; j < G.vexnum; j++)                System.out.print(G.Edge[i][j] + "\t");            System.out.println();        }    }     public static void main(String[] args) {        AMGraph G = new AMGraph();        CreateAMGraph(G);        print(G);    }} class AMGraph {    char Vex[] = new char[CreateAMGraph.MaxVnum];    int Edge[][] = new int[CreateAMGraph.MaxVnum][CreateAMGraph.MaxVnum];    int vexnum; // 顶点数    int edgenum; // 边数}

    四、测试

    绿色为输入,白色为输出。

    Java如何用邻接矩阵存储图

    以上就是关于“Java如何用邻接矩阵存储图”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

    免责声明:

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

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

    Java如何用邻接矩阵存储图

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

    下载Word文档

    猜你喜欢

    Java如何用邻接矩阵存储图

    这篇“Java如何用邻接矩阵存储图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何用邻接矩阵存储图”文章吧。一、点
    2023-07-02

    Java编程如何实现邻接矩阵表示稠密图

    这篇文章主要介绍了Java编程如何实现邻接矩阵表示稠密图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之
    2023-05-30

    Java语言描述存储结构与邻接矩阵代码示例

    存储结构要存储一个图,我们知道图既有结点,又有边,对于有权图来说,每条边上还带有权值。常用的图的存储结构主要有以下二种:邻接矩阵邻接表邻接矩阵我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一
    2023-05-30

    Java怎么用邻接表存储图

    本篇内容主要讲解“Java怎么用邻接表存储图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么用邻接表存储图”吧!一、点睛邻接表是图的一种链式存储方法,其数据结构包括两部分:节点和邻接点
    2023-07-02

    python使用邻接矩阵构造图代码示例

    问题 如何使用list构造图邻接矩阵的方式 Python代码示例# !/usr/bin/env python # -*-encoding: utf-8-*- # author:LiYanwei # version:0.1# 邻接矩阵 '''
    2022-06-04

    Python使用邻接矩阵实现图及Dijkstra算法问题

    这篇文章主要介绍了Python使用邻接矩阵实现图及Dijkstra算法问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-16

    C语言数组中如何压缩存储特殊矩阵

    小编给大家分享一下C语言数组中如何压缩存储特殊矩阵,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.数组的定义数组是由n个相同类型的数据元素构成的有限序列,每个数
    2023-06-21

    Java如何应用矩阵代替循环

    今天小编给大家分享一下Java如何应用矩阵代替循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。应用矩阵代替循环 举个例
    2023-06-19

    如何使用OpenCV与JVM实现矩阵处理图像

    这篇文章给大家分享的是有关如何使用OpenCV与JVM实现矩阵处理图像的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。submat(int rowStart, int rowEnd, int colStart, i
    2023-06-26

    Java如何用redis存储map

    Java中使用Redis存储Map是一种有效的方法。使用步骤包括创建Map、获取、更新、遍历和删除键值对。具体方法如下:创建Map:使用jedis.hset()方法将键值对添加到Map。获取值:使用jedis.hget()方法获取指定键对应的值。更新值:使用jedis.hset()方法更新指定键对应的值。遍历键值对:使用jedis.hgetAll()方法获取Map中所有键值对,然后使用迭代器遍历。删除键值对:使用jedis.hdel()方法删除指定键对应的键值对。
    Java如何用redis存储map
    2024-04-02

    java中如何调用存储过程

    Java如何实现对存储过程的调用:1、不带输出参数的create procedure getsum@n int =0asdeclare @sum intdeclare @i intset @sum=0set @i=0while @i<=@n beginset
    java中如何调用存储过程
    2015-04-13

    java用redis如何存图片

    Java中使用Redis存储图片的方法:序列化图片,使用二进制安全字符串类型,设置数据类型为二进制安全字符串。优点包括快速访问、可扩展性和耐用性。缺点是存储空间限制、数据大小限制和缺乏图像处理功能。替代方案有传统文件系统、云存储服务和图像数据库。
    java用redis如何存图片
    2024-04-02

    利用java如何调用存储过程

    本篇文章给大家分享的是有关利用java如何调用存储过程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。详解java调用存储过程并封装成map 本文代码中注释写
    2023-05-31

    java中如何调用ORACLE存储过程

    小编给大家分享一下java中如何调用ORACLE存储过程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:无返回值的存储过程存储过程为:CREATE OR REP
    2023-06-03

    编程热搜

    • 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动态编译

    目录