数据结构与算法分析(Java语言描述)(25)—— 邻接表表示稀疏图
来源:互联网 发布:淘宝钻号出售 编辑:程序博客网 时间:2024/05/16 11:57
package com.dataStructure.graph;import java.util.ArrayList;import java.util.List;//// 稀疏图 - 邻接表//public class SparseGraph {//// private int n; // 节点数// private int m; // 边数// private boolean directed; // 是否为有向图// private List<Integer>[] g; // 图的具体数据//// // 构造函数// public SparseGraph(int n, boolean directed) {// assert n >= 0;// this.n = n;// this.m = 0; // 初始化没有任何边// this.directed = directed;// // g初始化为n个空的 ArrayList , 表示每一个g[i]都为空, 即没有任和边// // g 是一个存储 ArrayList 的数组// // 数组中的每一个元素都 图中的一个节点和与之有联系的节点 组成的ArrayList// g = (ArrayList<Integer>[]) new ArrayList[n];// for (int i = 0; i < n; i++)// g[i] = new ArrayList<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 表示的是 图中节点// // g[v] 表示图中与 v 相连的节点组成的 ArrayList// // g[v].add(w) 表示 将与 v 相连的节点 w 放到 g[v](ArrayList) 中// g[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].get(i) == w)// return true;// return false;// }//}// 使用 邻接表 表示 稀疏图public class SparseGraph { private int n; // 图中节点数量 private int m; // 图中边的数量 private List<Integer>[] g; // 邻接表 g private boolean directed; // 是否为有向图 public SparseGraph(int n, boolean directed) { this.n = n; // 初始化节点数量 this.m = 0; // 初始图中边数为 0 this.directed = directed; // 初始化一个用于存储 ArrayList<Integer>类型数据 的数组 g 作为邻接表 g = (ArrayList<Integer>[]) new ArrayList[n]; for (int i = 0; i < n; i++) { g[i] = new ArrayList<Integer>(); } } // 返回图中边的数量 public int E() { return m; } // 返回图中节点的数量 public int V() { return n; } // 在节点 v 与 w 之间添加一条边 public void addEdge(int v, int w) { // 当 v 和 w 之间没有边时 if (!hasEdge(v, w)) { // 在邻接表中添加一条 v 、 w 之间的边 g[v].add(w); if (v != w && !directed) g[w].add(v); // 图中边数+1 m++; } } // 判断两节点 v、w 之间是否存在边 private boolean hasEdge(int v, int w) { // 遍历 g[i] 中存储的 ArrayList,若其中存在 w ,返回 true for (int i = 0; i < g[v].size(); i++) { if (g[v].get(i) == w) return true; } return false; } // 返回节点v 的所有邻接节点 public Iterable<Integer> adjacentNode(int v){ return g[v]; }}
阅读全文
0 0
- 数据结构与算法分析(Java语言描述)(25)—— 邻接表表示稀疏图
- 数据结构与算法分析(Java语言描述)(26)—— 邻接矩阵表示稠密图
- 数据结构与算法分析(Java语言描述)(30)—— 有权图的实现
- 读书笔记:数据结构与算法分析(Java语言描述)——数据结构概论
- 数据结构与算法分析——Java语言描述
- 《数据结构与算法分析—Java语言描述》pdf
- 数据结构与算法分析(Java语言描述)(8)—— (随机)快速排序
- 数据结构与算法分析(Java语言描述)(9)—— (双轴)快速排序
- 数据结构与算法分析(Java语言描述)(1)—— 选择排序
- 数据结构与算法分析(Java语言描述)(2)—— 插入排序
- 数据结构与算法分析(Java语言描述)(3)—— 冒泡排序
- 数据结构与算法分析(Java语言描述)(4)—— 希尔排序
- 数据结构与算法分析(Java语言描述)(5)—— 归并排序
- 数据结构与算法分析(Java语言描述)(7)—— 快速排序
- 数据结构与算法分析(Java语言描述)(13)—— 原地堆排序
- 数据结构与算法分析(Java语言描述)(14)—— 索引堆
- 数据结构与算法分析(Java语言描述)(21)—— 并查集基础
- 数据结构与算法分析(Java语言描述)(33)—— 散列表
- Spring单例与线程安全小结
- 图论1
- skynet中使用云风的pbc
- mark
- nodeJs与grunt安装与配置
- 数据结构与算法分析(Java语言描述)(25)—— 邻接表表示稀疏图
- requests
- Authentication method password not supported by the server at this stage
- Linux命令(18)——screen命令
- openstack keystone整体架构与功能
- python3.6+pyqt5+pycharm5界面编程实例
- python类及对象
- html与css
- 关于指针和数组