#include #include #include #define MAX_VERTICES 30 #define MAX_EDGES 10 typedef unsigned char vertex; int main() { /*number of nodes in a graph*/ srand ( time(NULL) ); int numberOfVertices = rand() % MAX_VERTICES; /*number of maximum edges a vertex can have*/ srand ( time(NULL) ); int maxNumberOfEdges = rand() % MAX_EDGES; /*graphs is 2 dimensional array of pointers*/ if( numberOfVertices == 0) numberOfVertices++; vertex ***graph; printf("Total Vertices = %d, Max # of Edges = %d\n",numberOfVertices, maxNumberOfEdges); /*generate a dynamic array of random size*/ if ((graph = (vertex ***) malloc(sizeof(vertex **) * numberOfVertices)) == NULL) { printf("Could not allocate memory for graph\n"); exit(1); } /*generate space for edges*/ int vertexCounter = 0; /*generate space for vertices*/ int edgeCounter = 0; for (vertexCounter = 0; vertexCounter < numberOfVertices; vertexCounter++) { if ((graph[vertexCounter] = (vertex **) malloc(sizeof(vertex *) * maxNumberOfEdges)) == NULL) { printf("Could not allocate memory for edges\n"); exit(1); } for (edgeCounter = 0; edgeCounter < maxNumberOfEdges; edgeCounter++) { if ((graph[vertexCounter][edgeCounter] = (vertex *) malloc(sizeof(vertex))) == NULL) { printf("Could not allocate memory for vertex\n"); exit(1); } } } /*start linking the graph. All vetrices need not have same number of links*/ vertexCounter = 0; edgeCounter = 0; for (vertexCounter = 0; vertexCounter < numberOfVertices; vertexCounter++) { printf("%d:\t",vertexCounter); for (edgeCounter=0; edgeCounter < maxNumberOfEdges; edgeCounter++) { if (rand()%2 == 1) /*link the vertices*/ { int linkedVertex = rand() % numberOfVertices; graph[vertexCounter][edgeCounter] = graph[linkedVertex]; printf("%d, ", linkedVertex); } else /*make the link NULL*/ { graph[vertexCounter][edgeCounter] = NULL; } } printf("\n"); } return 1; } /* Total Vertices = 18, Max # of Edges = 8 0: 12, 9, 6, 1: 6, 1, 2: 7, 4, 1, 9, 3, 5, 3: 8, 13, 1, 12, 13, 6, 4: 5, 11, 5: 6, 6, 6, 5, 11, 6: 6, 5, 16, 10, 1, 13, 7: 14, 13, 13, 12, 8: 6, 12, 4, 9: 6, 17, 4, 10, 10: 6, 6, 11, 10, 11: 2, 16, 12: 3, 15, 7, 13: 6, 15, 3, 9, 15, 14: 4, 10, 15: 5, 4, 3, 16: 17, 11, 17: 0, 7,