Реализация графа списка смежности в c (любые библиотеки) - PullRequest
1 голос
/ 16 марта 2011

Я работаю над проектом, в котором я делаю трассировки на определенный IP-адрес из 10-15 разных IP-адресов.Большинство трассировок проходят по определенным общим маршрутизаторам на пути (прыжок) к одному и тому же пункту назначения.Полученные данные дают мне график.Я думаю, что для представления этих данных лучшим способом является список смежности.Есть ли какая-нибудь библиотека C, где я могу получить экземпляр такого графа и добавить к нему ребра (прыжки), когда я выполняю различные вызовы traceroute?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012
#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;
}
0 голосов
/ 16 марта 2011

Если вам когда-нибудь понадобится всего 10-15 IP-адресов, вы можете использовать матрицу. В противном случае попробуйте хеш-таблицу, которая отображает каждую вершину в связанный список. Есть load из free hash table реализации доступно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...