跳至主要內容

图的存储

小于 1 分钟

图的存储

图的存储

// 邻接数组
// adj[u][v] = w;初始化一般 w 设为 INF(无穷大);当 u==v 时,w 为 0;当为无权图时,可以退化成 boolean[][] adj;
int[][] adj;
// 获取下一跳
for (int v = 0; v < n; v++) {
    if (u != v && adj[u][v] != INF){}
}

// 集合类(类似邻接表)
// adj.get(u) = {v, w};当为无权图时,可以退化成 Map<Integer, List<Integer>>;
Map<Integer, List<int[]>> adj;
// 获取下一跳
for (int[] tuple : graph.getOrDefault(u, new ArrayList<>())) {}

// 链式前向星
int[] he = new int[N], ne = new int[M], ed = new int[M], we = new int[M];
int idx = 0;
void add(int u, int v, int w) {
    ed[idx] = v;
    ne[idx] = he[u];
    he[u] = idx;
    we[idx] = w;
    idx++;
}
// 获取下一跳
for (int i = he[u]; i != -1; i = ne[i]) {
    int v = ed[i];
    int w = we[i];
}

(全文完)