c中的邻接列表图形实现(任何库)

时间:2011-03-16 11:59:56

标签: c graph adjacency-list traceroute

我正在开展一个项目,我将跟踪路由到10-15个不同IP地址的某个IP地址。大多数跟踪路由都在路上(跳)到同一目的地的某些公共路由器上。结果数据给出了一个图表。我认为代表这些数据的最佳方式是邻接列表。是否有任何C库我可以获得这样一个图形的实例,并在我进行不同的traceroute调用时添加边缘(跳)?

2 个答案:

答案 0 :(得分:2)

#include <stdio.h>
#include <stdlib.h>

// adjacency list implementation of graph using linked list in c

struct adj_node {
    int index;
    struct adj_node * next;
};

void makeadj(struct adj_node *nod,int adj) {
    struct adj_node *newadj=(struct adj_node *)malloc(sizeof(struct adj_node));
    newadj->index=adj;
    newadj->next=NULL;
    while(nod->next!=NULL)nod=nod->next;
    nod->next=newadj;
}

int main(){
    int i;
    struct adj_node graph[4],*temp;
    for(i=0;i<4;i++){
        graph[i].index=i;graph[i].next=NULL;
    }
    //example
    makeadj(&graph[0],2);
    makeadj(&graph[0],3);
    makeadj(&graph[1],2);
    makeadj(&graph[2],0);
    makeadj(&graph[2],1);
    makeadj(&graph[2],3);
    temp=&graph[2];
    while(temp->next!=NULL){
        printf("%d",temp->next->index);
        temp=temp->next;
    }
    return 0;
}

答案 1 :(得分:0)

如果您只需要10-15个IP地址,则可以使用矩阵。否则,尝试将每个顶点映射到链表的哈希表。有loads free hash table implementations available {{3}}。