无向图的基本API,实现,测试

API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Graph {

/**
* 创建一个含有 v 个顶点但是不含有边的无向图
*/
public Graph(int v)

/**
* 顶点数
*/
int v();

/**
* 边数
*/
int e();

/**
* 添加一条无向边 v - w
*/
void addEdge(int v, int w);

/**
* 与 v 相邻的所有顶点
*/
Iterable<Integer> adj(int v);
}

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class Graph {

/**
* 顶点数目
*/
private int v;

/**
* 边的数目
*/
private int e;

/**
* 邻接表
*/
private LinkedList<Integer>[] adj;

public Graph(int v) {
this.v = v;
this.e = 0;

// 创建邻接表
adj = (LinkedList<Integer>[]) new LinkedList[v];

// 初始化邻接表
for (int i = 0; i < v; i++) {
adj[i] = new LinkedList<>();
}
}

/**
* 顶点数
*/
public int v() {
return v;
}

/**
* 边数
*/
public int e() {
return e;
}

/**
* 添加一条无向边 v - w
*/
public void addEdge(int v, int w) {
adj[v].add(w);
adj[w].add(v);
e++;
}

/**
* 与 v 相邻的所有顶点
*/
public Iterable<Integer> adj(int v) {
return adj[v];
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void main(String[] args) {
Graph graph = new Graph(13);
graph.addEdge(0, 5);
graph.addEdge(4, 3);
graph.addEdge(0, 1);
graph.addEdge(9, 12);
graph.addEdge(6, 4);
graph.addEdge(5, 4);
graph.addEdge(0, 2);
graph.addEdge(11, 12);
graph.addEdge(9, 10);
graph.addEdge(0, 6);
graph.addEdge(7, 8);
graph.addEdge(9, 11);
graph.addEdge(5, 3);

for (int i : graph.adj(0)) {
System.out.print(i); // 输出 6215
}
System.out.println();
for (int i : graph.adj(3)) {
System.out.print(i); // 输出 54
}
}