我们知道,要表示结点,我们可以用一个一维数组来表示,然而对于结点和结点之间的关系,则无法简单地用一维数组来表示了,我们可以用二维数组来表示,也就是一个矩阵形式的表示方法。

我们假设A是这个二维数组,那么A中的一个元素aij不仅体现出了结点vi和结点vj的关系,而且aij的值正可以表示权值的大小。

邻接矩阵模型类

邻接矩阵模型类的类名为AMWGraph.java,能够通过该类构造一个邻接矩阵表示的图,且提供插入结点,插入边,取得某一结点的第一个邻接结点和下一个邻接结点。

import java.util.ArrayList;

import java.util.LinkedList;

public class AMWGraph {

private ArrayList vertexList;

//存储点的链表

private int[][] edges;

//邻接矩阵,用来存储边

private int numOfEdges;

//边的数目

public AMWGraph(int n) {

//初始化矩阵,一维数组,和边的数目

edges=new int[n][n];

vertexList=new ArrayList(n);

numOfEdges=0;

}

//得到结点的个数

public int getNumOfVertex() {

return vertexList.size();

}

//得到边的数目

public int getNumOfEdges() {

return numOfEdges;

}

//返回结点i的数据

public Object getValueByIndex(int i) {

return vertexList.get(i);

}

//返回v1,v2的权值

public int getWeight(int v1,int v2) {

return edges[v1][v2];

}

//插入结点

public void insertVertex(Object vertex) {

vertexList.add(vertexList.size(),vertex);

}

//插入结点

public void insertEdge(int v1,int v2,int weight) {

edges[v1][v2]=weight;

numOfEdges++;

}

//删除结点

public void deleteEdge(int v1,int v2) {

edges[v1][v2]=0;

numOfEdges--;

}

//得到第一个邻接结点的下标

public int getFirstNeighbor(int index) {

for (int j=0;j

if (edges[index][j]>0) {

return j;

}

}

return -1;

}

//根据前一个邻接结点的下标来取得下一个邻接结点

public int getNextNeighbor(int v1,int v2) {

for (int j=v2+1;j

if (edges[v1][j]>0) {

return j;

}

}

return -1;

}

}

下面再看看java编程实现邻接矩阵表示稠密图代码:

package com.dataStructure.graph;

稠密图 - 使用邻接矩阵表示

//public class DenseGraph {

//

//  private int n; // 节点数

//  private int m; // 边数

//  private boolean directed;  // 是否为有向图

//  private boolean[][] g;   // 图的具体数据

//

//  // 构造函数

//  public DenseGraph(int n, boolean directed) {

//    assert n >= 0;

//    this.n = n;

//    this.m = 0;  // 初始化没有任何边

//    this.directed = directed;

//    // g初始化为n*n的布尔矩阵, 每一个g[i][j]均为false, 表示没有任和边

//    // false为boolean型变量的默认值

//    g = new boolean[n][n];

//  }

//

//  public int V() {

//    return n;

//  } // 返回节点个数

//

//  public int E() {

//    return m;

//  } // 返回边的个数

//

//  // 向图中添加一个边

//  public void addEdge(int v, int w) {

//

//    assert v >= 0 && v < n;

//    assert w >= 0 && w < n;

//

//    if (hasEdge(v, w))

//      return;

//

//    // 连接 v 和 w

//    g[v][w] = true;

//    if (!directed)

//      g[w][v] = true;

//

//    // 边数 ++

//    m++;

//  }

//

//  // 验证图中是否有从v到w的边

//  boolean hasEdge(int v, int w) {

//    assert v >= 0 && v < n;

//    assert w >= 0 && w < n;

//    return g[v][w];

//  }

//

//  // 返回图中一个顶点的所有邻边

//  // 由于java使用引用机制,返回一个Vector不会带来额外开销,

//  public Iterable adj(int v) {

//      assert v >= 0 && v < n;

//      Vector adjV = new Vector();

//      for(int i = 0 ; i < n ; i ++ )

//      if( g[v][i] )

//      adjV.add(i);

//      return adjV;

//      }

//}

import java.util.ArrayList;

import java.util.List;

// 使用 邻接矩阵 表示 稠密图

public class DenseGraph{

private int n;

// 图中的节点数

private int m;

// 图中的边数

private Boolean[][] g;

// 邻接矩阵g

private Boolean directed;

// 是否为有向图

public DenseGraph(int n, Boolean directed){

this.n = n;

// 初始化图中的节点数量

this.m = 0;

// 图中边(edge)的数量初始化为0

this.directed = directed;

g = new Boolean[n][n];

// 邻接矩阵 g 初始化为一个 n*n 的二维矩阵

// 索引代表图中的节点,g中存储的值为 节点是否有边

}

// 返回图中边的数量

public int E(){

return m;

}

// 返回图中节点的数量

public int V(){

return n;

}

// 在图中指定的两节点之间加边

public void addEdge(int v, int w){

if (!hasEdge(v, w)){

// 连接[v][w]

g[v][w] = true;

// 无向图

if (!directed)

g[w][v] = true;

// 图中边的数量+1

m++;

}

}

// 判断两节点之间是否有边

private Boolean hasEdge(int v, int w){

return g[v][w];

}

// 返回所有 节点 v 的 邻接节点

public Iterable adjacentNode(int v){

// adjacentL 用于存储 v 的邻接节点

List adjacentL = new ArrayList<>();

// 找到所有与 v 邻接的节点,将其加入 adjacentL 中

for (int i = 0; i < n;i++){

if (g[v][i])

adjacentL.add(i);

}

return adjacentL;

}

}

总结

以上就是本文关于Java编程实现邻接矩阵表示稠密图代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

java布尔矩阵程序_Java编程实现邻接矩阵表示稠密图代码示例相关推荐

  1. java转换ip地址格式转换_Java编程IP地址和数字相互转换代码示例

    最近才知道,将ip地址转换成十进制.八进制.十六进制同样可以访问网站. IP转为数字(第二种算法.用左移.按位或实现.效率更高.): public long ipToLong(String ipAdd ...

  2. java字符串取反_Java探索之string字符串的应用代码示例

    String类中提供了丰富的用于操作字符串的方法. int indexOf(String str) 该方法用于返回当给定字符串在当前字符串中的位置,若当前字符串不包含给定字符串则返回-1. 重载的方法 ...

  3. java事件绑定,Java编程GUI中的事件绑定代码示例

    程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定: 在程序执行前方法已经被绑定,此时由编译 ...

  4. 连通分量 java_Java编程实现深度优先遍历与连通分量代码示例

    深度优先遍历 深度优先遍历类似于一个人走迷宫: 如图所示,从起点开始选择一条边走到下一个顶点,没到一个顶点便标记此顶点已到达. 当来到一个标记过的顶点时回退到上一个顶点,再选择一条没有到达过的顶点. ...

  5. 矩阵、坐标变换、相控阵天线拟合方向图代码

    矩阵.坐标变换.相控阵天线拟合方向图 代码 文章目录 矩阵.坐标变换.相控阵天线拟合方向图 代码 矩阵 Matrix.h Matrix.cpp 坐标变换 CConvert.h CConvert.cpp ...

  6. 用条件运算符编写java程序_Java 编程入门课程丨第 8 单元:条件运算符和控制语句...

    原标题:Java 编程入门课程丨第 8 单元:条件运算符和控制语句 教程概览 本单元是"Java 编程入门"课程的第 8 部分.尽管各单元中讨论的概念具有独立性,但实践组件是在您学 ...

  7. java递归 优点缺点_java编程之递归算法总结

    1.何为递归 个人理解就是自己调用自己,直到满足一个条件结束自己调用自己的过程,这个就是递归.举一个通俗的点的例子: 假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问 ...

  8. java模拟电梯程序_Java编写的电梯模拟系统《结对作业》

    伙伴成员:李伊 http://home.cnblogs.com/u/Yililove/ 对于这次作业,我刚开始一点思绪都没有,在老师安排了结对伙伴李伊之后,我的搭档问我,我们需要什么编程语言来编写程序 ...

  9. java记事本应用程序_Java教程:使用记事本编写运行Java程序

    Java教程经过上节的操作已经配置完了 Java 的开发环境,但并不清楚所配置的开发环境是否真的可以运行 Java 应用程序.为了解除这个疑虑,也为了使读者对开发 Java 应用程序的步骤有一个初步的 ...

最新文章

  1. [转]ASP.Net4.0中新增23项功能
  2. POJ - 3252 Round Numbers(数位dp)
  3. linux下离线安装gcc
  4. (转) Spring读书笔记-----Spring的Bean之配置依赖
  5. Android之使用Intent跳转到一个网页
  6. cuda Synchronization Functions
  7. ERP核心业务流程和Oracle-ERP业务和数据对象分析
  8. 搜狗词库scel格式转txt文本
  9. 模仿概念版QQ登录界面(超炫)
  10. 如何下载风云卫星数据?
  11. matlab 模糊提取,[转载]Matlab 的fspecial函数用法 图像模糊、提取边缘
  12. Work Like Alibaba系列分享回顾整理(含演讲幻灯片、视频):持续更新中
  13. 折腾词库,一个词库互转程序
  14. 【PHP发送邮件】PHP实现发送邮件
  15. 【Android】技术调研:用代码模拟屏幕点击、触摸事件
  16. 有关光照模块的具体问题及解决方案
  17. 输出倒逼输入:学习方法
  18. ESP8266 基础篇:内存分布
  19. 任正非竟然要炸掉华为「研发金字塔」,到底怎么回事?
  20. 初链-解读初链黄皮书

热门文章

  1. 游戏服务器的压力测试应该如何进行
  2. 学习python需要多长时间?
  3. 零基础怎么学Python?要学多久?
  4. 快递驿站取件管理系统|基于SpringBoot的快递栈系统设计与实现
  5. 双双棱镜同轴结构光三维测量系统(Applied Optics 2022)
  6. Jquery each continu
  7. GitHub小技巧, 让你嗖嗖找到想要的
  8. 嵌入式系统概论-6-软件与内核
  9. 《大富翁8》中智力问答的题目、答案
  10. 攀登者张梁将出席深圳户外展宣传登山文化,讲述18年登山探险史