簡體   English   中英

C 中用於無向(未加權)圖的鄰接表

[英]Adjacency List in C for undirected (unweighted) graph

這是我的代碼:

#define V 5

typedef struct edge* link;

//structure for reprenting edges
typedef struct edge{
    int dst;        //number of destination node
    //int weight;   //for weigthed graphs
    link next;      //link to next edge
} edge_t;

link new_edge(int dst, link next) {
    link edge = (link) malloc(sizeof(edge_t));

    edge->dst = dst;
    edge->next = next;
    return edge;
}

int main() {

    link edge;
    link adj[V];
    //the array contains V pointers to lists of edges
    //each list for each node of my graph

    int i;
    int j;

    //all lists are empty at beginning
    for (i = 0; i < V; i ++) {
        adj[i] = NULL;
    }

    printf("input the edges:\n");
    
    while (scanf("%d %d", &i, &j) == 2) {
        adj[i] = new_edge(j, adj[i]);
        //in the list for node i
        //put the edge to node j
        adj[j] = new_edge(i, adj[j]); //if it is undirect
        //in the list for node j
        //put the edge to node i
    }
    
    printf("adjacency list is: \n");
    //cycle over the nodes
    for (i=0; i<V; i++) {
        if (adj[i] == NULL) {
            printf("%d is null list\n", i);
        }
        //print all the edges for that node
        for (edge = adj[i]; edge != NULL; edge = edge -> next) {
            printf("edge %d -> %d\n", i, edge->dst);
        }
    }
}

輸入:
0 1
0 2
1 3
停止
OUTPUT:
鄰接表是:
邊 0 -> 2
邊 0 -> 1
邊 1 -> 3
邊 1 -> 0
邊 2 -> 0
邊 3 -> 1
4是null列表

這張圖片顯示了我的new_edge function 是如何工作的,藍色區域(在圖片中)正在改變,所以我可以遍歷列表,所以我的問題是為什么藍色區域等於 NULL?,因為它指向列表中的最后一項,我認為它不會為 NULL(當我遍歷列表以打印它時,我驗證它是 null)。

在此處輸入圖像描述

adj的元素是指向節點的指針,而不是節點。 另一方面,節點中的next指向的是節點,而不是指向節點的指針。 因此, next不會指向adj的元素。

這就是您的代碼實際工作的方式:

您的代碼實際如何工作

如您所見,指針沒有回環,您的藍色區域(添加了節點的adj元素)不等於NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM