java 邻接矩阵_Java中的邻接矩阵
小编典典
首先,我是否要自己建立一个图(也许有节点和边类?),然后从中构造一个邻接矩阵?还是邻接矩阵本身就是图?
没有人真正阅读您的作业说明就无法肯定地回答该问题。但是,除非分配中特别提及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中的邻接矩阵相关推荐
- java 事务_Java中事务总结详解(精华)
1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...
- [转载] c++多态与java多态性_Java中的多态性
参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...
- java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法
1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...
- java 包装类_Java中的包装类
Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...
- java 难度_java中难度大一点的面试题
1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...
- math java 计算_Java中的数学计算函数汇总
Math类: java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...
- java中的多态性_[转载] c++多态与java多态性_Java中的多态性
参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...
- c++多态与java多态性_Java中的多态性
c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism ...
- java引_JAVA中的引用
JDK1.2之后,Java扩充了引用的概念,将引用分为强引用.软引用.弱引用和虚引用四种. 强引用 类似于"Object a = new Object()"这类的引用,只要垃圾强引 ...
最新文章
- 昨天还在 for 循环里写加号拼接字符串的那个同事,今天已经不在了
- 计算机会计应用实训,计算机会计模拟实习报告.pdf
- Linux 虚拟化网络技术 — 虚拟网络协议栈
- 关于虚拟机下linux共享Windows文件的解决方案
- android获取电池是否充电,Android 判断电池是否为充电状态的方法
- python pickle模块详解
- java使用wordnet获取近义词
- FSR402压力传感器数据转换
- matlab2016 wavread,matlab 7.10里面的wavread函数不能打开.wav文件。我的wav文件是电脑自带的录音机录的...
- 26-TeamBuilding-团队建设
- Linux-虚拟网络设备-LinuxBridge
- 【CTF WriteUp】2020全国工业互联网安全技术技能大赛(原护网杯)Crypto题解
- 【转】String求求你别秀了
- 浅谈子网、子网掩码、保留地址
- Raptor入门练习
- max-width min-width max-height min-height
- 华南师范大学计算机课网址,华南师范大学网络课程 首页
- 图(Graph)-图的相关概念
- 几个大佬的公众号,贼厉害
- 【数据挖掘】期末复习模拟题(暨考试题)
热门文章
- java操作Excel,mdb,dbf
- mysql第一二三范式_第一范式、第二范式、第三范式
- 浅谈oracle树状结构层级查询测试数据
- vs编译时WinSock2.h级ws2def.h大量报错
- 【Unity】InputSystem
- 02 Spring标签解析-BeanDefinitionParser
- vb限制文本框输入内容长度_限制VB文本框输入的代码
- 解决 ubuntu 14.04下,eclipse adt-bundle-linux 闪退的问题,最新ADT-23.0.7
- 自己动手写一个操作系统——MBR(2)
- 坐标系转换矩阵和几何转换矩阵的关系