【问题标题】:graph implementation with adjacency list java具有邻接表java的图形实现
【发布时间】:2020-04-29 21:30:02
【问题描述】:
我有很多点的二维坐标,例如点 a = x,y
我想使用邻接列表列表进行图形实现,并以最有效的方式连接无向图的某些点(不使用地图或哈希表)
我尝试为名为 point 的点创建一个类,并创建了一个链表数组
私有列表节点[] = new LinkedList[numPoints]
问题是数组将是整数,我不能不存储 x 和 y,我需要知道 x 和 y
【问题讨论】:
标签:
java
algorithm
graph
graph-algorithm
adjacency-list
【解决方案1】:
你可以试试这个无向图的实现
public class Graph {
private static final String NEW_LINE = System.lineSeparator();
private final int vertices;
private int edges;
private List<Integer>[] adj;
public Graph(int v) {
if (v < 0)
throw new IllegalArgumentException("Number of vertices must be non-negative");
this.vertices = v;
this.edges = 0;
adj = (List<Integer>[]) new LinkedList[v];
for (int i = 0; i < v; i++) {
adj[v] = new LinkedList<Integer>();
}
}
public int getVertices() {
return vertices;
}
public int getEdges() {
return edges;
}
public void addEdge(int v, int w) {
adj[v].add(w);
adj[w].add(v);
edges++;
}
public int degree(int v) {
return adj[v].size();
}
public Iterable<Integer> adj(int v) {
return adj[v];
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
for (int v = 0; v < vertices; v++) {
builder.append(v + ": ");
for (int w : adj[v]) {
builder.append(w + " ");
}
builder.append(NEW_LINE);
}
return builder.toString();
}
}