JAVA算法:无向图的表示
下面是一个具有5个顶点的无向图的例子:
用JAVA代码来创建这个无向图
package com.bean.algorithm.graph;
import java.util.LinkedList;
public class UndirectedGraph {
// 用户定义的无向图用连接表来表示
// 创建一个LinkedList类型的数据结构,Size 为无向图图的顶点数
public static class Graph
{
int V;
LinkedList<Integer> adjListArray[];
// 构造方法
Graph(int V)
{
this.V = V;
// 定义LinkedList的Size为无向图的顶点数
adjListArray = new LinkedList[V];
// 为每条边创建一个LinkedList类型的数据结构
for(int i = 0; i < V ; i++){
adjListArray[i] = new LinkedList<>();
}
}
}
// 为无向图添加边
static void addEdge(Graph graph, int src, int dest)
{
// 从 src 到 dest创建边
graph.adjListArray[src].add(dest);
// 既然是无向图,从 dest 到 src 也添加边
graph.adjListArray[dest].add(src);
}
// 输出无向图
static void printGraph(Graph graph)
{
for(int v = 0; v < graph.V; v++)
{
System.out.println("Adjacency list of vertex "+ v);
System.out.print("head");
for(Integer pCrawl: graph.adjListArray[v]){
System.out.print(" -> "+pCrawl);
}
System.out.println("\n");
}
}
// 测试方法
public static void main(String args[])
{
// 按照给定的无向图进行初始化
int V = 5;
Graph graph = new Graph(V);
addEdge(graph, 0, 1);
addEdge(graph, 0, 4);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 3);
addEdge(graph, 3, 4);
// 按照邻接表的形式输出图
printGraph(graph);
}
}
输出结果
Adjacency list of vertex 0
head -> 1 -> 4
Adjacency list of vertex 1
head -> 0 -> 2 -> 3 -> 4
Adjacency list of vertex 2
head -> 1 -> 3
Adjacency list of vertex 3
head -> 1 -> 2 -> 4
Adjacency list of vertex 4
head -> 0 -> 1 -> 3