小编典典

首先,我是否要自己建立一个图(也许有节点和边类?),然后从中构造一个邻接矩阵?还是邻接矩阵本身就是图?

没有人真正阅读您的作业说明就无法肯定地回答该问题。但是,除非分配中特别提及Node和Edge类,否则我的猜测是您仅应使用邻接矩阵来表示图形。

然后,我对如何在程序中实现相邻矩阵感到困惑。节点被命名为“ ND5”和“ NR7”之类的东西,因此我将不得不设置并读取其边缘,[ND5][NR7]但是我不确定如何设置一个二维数组,其外部为字符串,内部为数字。

我完全可以理解您在这里的困惑。您实际要做的是 在节点名称和矩阵索引之间创建双射(一对一关系)。对于例如,如果你有Ñ在图中的节点,则需要一个n×n的矩阵(即new boolean[n][n]),并且每个节点将对应于一个单独的整数范围为0直到Ñ(不含n个)。

我不确定目前为止您班上已经讲过什么数据结构,但是最简单的方法可能是使用Map,

它可以让您查找类似的名称”ND5”并获取整数(索引) 。

另一个不错的选择是使用数组。你可以把你所有的节点名称到一个数组,排序它Arrays.sort,然后一旦它的排序,你可以使用 发现,阵列中的特定节点名的索引。我认为该 解决方案实际上比使用a更好,因为它可以让您 双向进行查找。您曾经 用来进行名称到索引的查找,而您只是在数组中建立索引以执行索引到 名称的查找。

Arrays.binarySearch

Map

Arrays.binarySearch

给定该图,下面是一些示例代码,说明了如何执行此操作:(警告!

未经测试)

import java.util.Arrays;

// Add all your node names to an array

String[] nameLookup = new String[4];

nameLookup[0] = "A";

nameLookup[1] = "B";

nameLookup[2] = "C";

nameLookup[3] = "D";

// Our array is already properly sorted,

// but yours might not be, so you should sort it.

// (if it's not sorted then binarySearch won't work)

Arrays.sort(nameLookup);

// I'm assuming your edges are unweighted, so I use boolean.

// If you have weighted edges you should use int or double.

// true => connected, false => not connected

// (entries in boolean arrays default to false)

boolean[][] matrix = new boolean[4];

for (int i=0; i

// I don't want to call Arrays.binarySearch every time I want an index,

// so I'm going to cache the indices here in some named variables.

int nodeA = Arrays.binarySearch(nameLookup, "A");

int nodeB = Arrays.binarySearch(nameLookup, "B");

int nodeC = Arrays.binarySearch(nameLookup, "C");

int nodeD = Arrays.binarySearch(nameLookup, "D");

// I'm assuming your edges are undirected.

// If the edges are directed then the entries needn't be semmetric.

// A is connected to B

matrix[nodeA][nodeB] = true;

matrix[nodeB][nodeA] = true;

// A is connected to D

matrix[nodeA][nodeD] = true;

matrix[nodeD][nodeA] = true;

// B is connected to D

matrix[nodeB][nodeD] = true;

matrix[nodeD][nodeB] = true;

// C is connected to D

matrix[nodeC][nodeD] = true;

matrix[nodeD][nodeC] = true;

// Check if node X is connected to node Y

int nodeX = Arrays.binarySearch(nameLookup, stringNameOfX);

int nodeY = Arrays.binarySearch(nameLookup, stringNameOfY);

if (matrix[nodeX][nodeY]) { /* They're connected */ }

// Print all of node Z's neighbors' names

int nodeZ = Arrays.binarySearch(nameLookup, stringNameOfZ);

for (int i=0; i

if (matrix[nodeZ][i]) {

System.out.println(nameLookup[nodeZ] + " is connected to " + nameLookup[i]);

}

}

2020-11-16

java 邻接矩阵_Java中的邻接矩阵相关推荐

  1. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  2. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  3. java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法

    1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...

  4. java 包装类_Java中的包装类

    Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...

  5. java 难度_java中难度大一点的面试题

    1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...

  6. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  7. java中的多态性_[转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  8. c++多态与java多态性_Java中的多态性

    c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism ...

  9. java引_JAVA中的引用

    JDK1.2之后,Java扩充了引用的概念,将引用分为强引用.软引用.弱引用和虚引用四种. 强引用 类似于"Object a = new Object()"这类的引用,只要垃圾强引 ...

最新文章

  1. 昨天还在 for 循环里写加号拼接字符串的那个同事,今天已经不在了
  2. 计算机会计应用实训,计算机会计模拟实习报告.pdf
  3. Linux 虚拟化网络技术 — 虚拟网络协议栈
  4. 关于虚拟机下linux共享Windows文件的解决方案
  5. android获取电池是否充电,Android 判断电池是否为充电状态的方法
  6. python pickle模块详解
  7. java使用wordnet获取近义词
  8. FSR402压力传感器数据转换
  9. matlab2016 wavread,matlab 7.10里面的wavread函数不能打开.wav文件。我的wav文件是电脑自带的录音机录的...
  10. 26-TeamBuilding-团队建设
  11. Linux-虚拟网络设备-LinuxBridge
  12. 【CTF WriteUp】2020全国工业互联网安全技术技能大赛(原护网杯)Crypto题解
  13. 【转】String求求你别秀了
  14. 浅谈子网、子网掩码、保留地址
  15. Raptor入门练习
  16. max-width min-width max-height min-height
  17. 华南师范大学计算机课网址,华南师范大学网络课程 首页
  18. 图(Graph)-图的相关概念
  19. 几个大佬的公众号,贼厉害
  20. 【数据挖掘】期末复习模拟题(暨考试题)

热门文章

  1. java操作Excel,mdb,dbf
  2. mysql第一二三范式_第一范式、第二范式、第三范式
  3. 浅谈oracle树状结构层级查询测试数据
  4. vs编译时WinSock2.h级ws2def.h大量报错
  5. 【Unity】InputSystem
  6. 02 Spring标签解析-BeanDefinitionParser
  7. vb限制文本框输入内容长度_限制VB文本框输入的代码
  8. 解决 ubuntu 14.04下,eclipse adt-bundle-linux 闪退的问题,最新ADT-23.0.7
  9. 自己动手写一个操作系统——MBR(2)
  10. 坐标系转换矩阵和几何转换矩阵的关系