# IT. Expert System.

## C

### graph

A graph is a collection of nodes and edges. These nodes are connected by links(edges). These edges may be directed or undirected.

Syntax:
`Syntax doesn't exist.`

Example:

```/*graph.c*/
#include
#include
#include "graph.h"

/* Function to create an adjacency list node*/
{
if(!newNode)
err_exit("Unable to allocate memory for new node");

newNode->vertex = v;
newNode->next = NULL;

return newNode;
}

/* Function to create a graph with n vertices; Creates both directed and undirected graphs*/
graph_p createGraph(int n, graph_type_e type)
{
int i;
graph_p graph = (graph_p)malloc(sizeof(graph_t));
if(!graph)
err_exit("Unable to allocate memory for graph");
graph->num_vertices = n;
graph->type = type;

/* Create an array of adjacency lists*/
err_exit("Unable to allocate memory for adjacency list array");

for(i = 0; i < n; i++)
{
}

return graph;
}

/*Destroys the graph*/
void destroyGraph(graph_p graph)
{
if(graph)
{
{
int v;
/*Free up the nodes*/
for (v = 0; v < graph->num_vertices; v++)
{
{
free(tmp);
}
}
}
/*Free the graph*/
free(graph);
}
}

/* Adds an edge to a graph*/
void addEdge(graph_t *graph, int src, int dest)
{
/* Add an edge from src to dst in the adjacency list*/

if(graph->type == UNDIRECTED)
{
/* Add an edge from dest to src also*/
newNode = createNode(src);
}
}

/* Function to print the adjacency list of graph*/
void displayGraph(graph_p graph)
{
int i;
for (i = 0; i < graph->num_vertices; i++)
{
printf("\n%d: ", i);
{
}
printf("NULL\n");
}
}

int main()
{
graph_p undir_graph = createGraph(5, UNDIRECTED);
graph_p dir_graph = createGraph(5, DIRECTED);

printf("\nUNDIRECTED GRAPH");
displayGraph(undir_graph);
destroyGraph(undir_graph);

printf("\nDIRECTED GRAPH");
displayGraph(dir_graph);
destroyGraph(dir_graph);

return 0;
}```

Content