About | Features | Technologies | Requirements | Starting Out | License | Author
Graph Visualizer is a library written entirely in C that allows for the creating of graphs using adjacency lists. Once the graphs are created, you can add/remove/edit vertices (weighted or not) as well as edges. The adjacency list representation of the graph can then be printed out to a specified file.
The library also has functions to perform a simple Pagerank algorithm on the graph as well as calculate and display the shortest path using Dijkstra's algorithm
[:white_check_mark:] Create graphs using adjacency lists;
[:white_check_mark:] Add/remove/edit Vertices;
[:white_check_mark:] Add/edit/remove edges;
[:white_check_mark:] Calculate pagerank;
[:white_check_mark:] Calculate shortest path with Dijkstra's algorithm;
[:x:] GUI;
The library is entirely written in C
none
So you want to start creating graphs?
# Clone the library
$ git clone https://github.com/nicolunardi/graph-visualizer
# Access it
$ cd graph-visualizer
First of all, let's create an empty graph.
// import the necessary files
#include "graph.h"
int main(int argc, char const *argv[]) {
// create the graph using graph_create from graph.h
// This will allocate the required memory for a new graph and return
// return a pointer to the new graph.
graph G = graph_create();
...
}
Now lets add some vertices to the graph.
// import the necessary files
#include "graph.h"
int main(int argc, char const *argv[]) {
...
// We add some vertices using the graph_add_vertex function from graph.h.
graph_add_vertex(G, "0");
graph_add_vertex(G, "1");
graph_add_vertex(G, "2");
graph_add_vertex(G, "3");
graph_add_vertex(G, "4");
graph_add_vertex(G, "5");
graph_add_vertex(G, "6");
graph_add_vertex(G, "7");
...
}
Now lets add some edges.
// import the necessary files
#include "graph.h"
int main(int argc, char const *argv[]) {
...
// We add some edges using the graph_add_edge function from graph.h.
// The function takes 4 parameters; the graph, the first and second vertices,
// and the edge weight.
graph_add_edge(G, "0", "1", 1);
graph_add_edge(G, "1", "2", 1);
graph_add_edge(G, "2", "3", 1);
graph_add_edge(G, "2", "6", 1);
graph_add_edge(G, "2", "7", 1);
graph_add_edge(G, "3", "4", 1);
graph_add_edge(G, "7", "5", 1);
graph_add_edge(G, "6", "5", 1);
graph_add_edge(G, "4", "5", 1);
graph_add_edge(G, "5", "4", 1);
...
}
Then we can generate a shortest path table for a source vertex and display shortest path to a destination vertex. We must import "dijkstra.h"
// import the necessary files
#include "graph.h"
#include "dijkstra.h" // import dijkstra.h to be able to use shortest path functions
int main(int argc, char const *argv[]) {
...
// Use graph_shortest_path from dijkstra.h to generate the shortest path table
// from source vertex ("0" in this case).
graph_shortest_path(G, "0");
// Display the shortest path from vertex "0" to vertex "4"
graph_view_path(G, "4"); // 0 -> 1 -> 2 -> 3 -> 4
...
}
Once done with a graph, you must de-allocate any memory used.
int main(int argc, char const *argv[]) {
...
graph_destroy(G);
return 0
}
Other functions from "graph.h"
// Will print to a provided file the vertices and their associated edges as
// well as weights
void graph_show (graph G, FILE *file);
// Check to see if a graph has a particular vertex
bool graph_has_vertex (graph G, string vertex);
// remove a vertex from a graph
void graph_remove_vertex (graph G, string vertex);
// Show the number of vertices in a graph
size_t graph_vertices_count (graph G);
// Check if a graph has a particular edge
bool graph_has_edge (graph G, string vertex1, string vertex2);
// Remove a particular edge
size_t graph_remove_edge (graph G, string vertex1, string vertex2);
// Change the weight of a particular edge
void graph_set_edge (graph G, string vertex1, string vertex2, size_t weight);
// Get the weight of a particular edge
size_t graph_get_edge (graph G, string vertex1, string vertex2);
// Display the degree of a vertex
size_t graph_edges_count (graph G, string vertex);
Functions from "pagerank.h"
// Generate the pagerank for a graph
void graph_pagerank(graph G, double damping, double delta);
// Display all vertices in order of pagerank
void graph_viewrank(graph G, FILE *file);
This project is under license from MIT
Made with ❤️ by Nico Lunardi