Java 算法:图的表示
邻接矩阵(Adjacency Matrix):
2*2的二维矩阵:0表示不相连,1表示相连。
无向图:
有向图:
邻接表(Adjacency Lists):
每一行相当于一个链表,存放该节点相关联的节点
无向图:
有向图:
邻接表的存储空间要比邻接矩阵要小。
邻接表适合于表示稀疏图(SparseGraph)
邻接矩阵适合表示稠密图(DenseGraph)
稠密图的实现:
// 稠密图 - 邻接矩阵
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 ){//v和w都不越界assert v >= 0 && v < n ;assert w >= 0 && w < n ;if( hasEdge( v , w ) ){return;}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];}
}
稀疏图的实现:
// 稀疏图 - 邻接表
public class SparseGraph {private int n; // 节点数private int m; // 边数private boolean directed; // 是否为有向图private Vector<Integer>[] g; // 图的具体数据// 构造函数public SparseGraph( int n , boolean directed ){assert n >= 0;this.n = n;this.m = 0; // 初始化没有任何边this.directed = directed;// g初始化为n个空的vector, 表示每一个g[i]都为空, 即没有任和边g = (Vector<Integer>[])new Vector[n];for(int i = 0 ; i < n ; i ++){g[i] = new Vector<Integer>();}}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 ;//向v关联一个节点wg[v].add(w);if( v != w && !directed ){g[w].add(v);}m ++;}// 验证图中是否有从v到w的边boolean hasEdge( int v , int w ){assert v >= 0 && v < n ;assert w >= 0 && w < n ;for( int i = 0 ; i < g[v].size() ; i ++ ){if( g[v].elementAt(i) == w ){return true;}}return false;}
}
Java 算法:图的表示相关推荐
- 希尔排序的java算法_Java算法系列篇 【希尔排序】
什么? 搞Java不会算法? 由于个人兴趣原因以及工作所需,最近了解Java算法的相关案例 及时分享 感兴趣的欢迎交流 希尔排序 描述: 基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直 ...
- 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...
数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...
- 【Java算法之dfs 与bfs详解】
下次再也不鸽了(つಥ㉨ಥ)つ 我发誓,真的!!! Java算法之dfs 与bfs 1. dfs 1.1 dfs递归 2. bfs 1. bfs常见两类问题 1.1==是否==有路径问题 1.2最短路径 ...
- java算法----排序----(6)希尔排序(最小增量排序)
1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---希尔排序(最小增量排序) 7 * 8 * @param args 9 */ 1 ...
- Java 集合类图(转)
1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,Ab ...
- 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》
文章目录 0.前言 1.功能 2.示例 有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来 ① 实现原理 ② 实现代码 ③ 性能分析 0. ...
- Set精讲(Java)·算法常用集合处理方法
Set精讲(Java)·算法常用集合处理方法 Set概述 Set集合类似于一个罐子,程序可以依次把多个对象"丢进"Set集合,而Set集合通常不能记住元素的添加顺序.实际上Set就 ...
- 128位java_求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救!...
求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救! 关注:157 答案:1 mip版 解决时间 2021-02-03 09:1 ...
- java算法:冒泡排序
java算法:冒泡排序 冒泡排序:不断遍历文件,交换倒序的相邻元素,直到文件排好顺序.冒泡排序的主要优点是容易实现,冒泡排序通常会比选择排序.插入排序慢. 如,对EXAMPLE 字母进行排序: E ...
- Eclipse 插件用法:Eclipse 利用 Amateras UML 生成 Java 类图、时序图和 UML 类图
文章目录 前言 一.安装 Eclipse 官方提供的安装框架 GEF 1.1.Eclipse 中第三方插件更新/安装策略 1.2.为什么选择 GEF 框架? 1.3.GEF 框架安装 二.安装 Ama ...
最新文章
- HP存储raid5两块硬盘离线lvm下vxfs文件系统恢复数据过程
- HALCON打开之后相机无法被别的程序找到解决方法
- python6翻_洗礼灵魂,修炼python(6)--活起来的代码+列表
- 对javascript作用域链的理解
- spring框架_一篇文章带你理解Spring框架
- Linux的centos永久关闭防火墙的命令
- 软件工程学习笔记(考试版)
- MFC里NewWindow2Explorer1的一些常用处理代码
- jquery ui仿腾讯web qq界面desktop酷炫特效
- java 鸡尾酒排序_Java实现几种常见排序方法
- Windows 8实例教程系列 - 开篇
- EOS开发“ Hello world !”
- 《IPv6安全》——2.3 IPv6网络勘察
- 10)-MySQL数据库基础练习(答案版)
- 模糊C均值聚类算法---图像分割(python)
- R语言-上海二手房数据分析
- part5 vue和HTML5相关知识总结
- 模拟卷Leetcode【普通】198. 打家劫舍
- activity启动模式你所不知道的异常情况
- 爬取微博热点评论用户ID--简易版本