CS 3343/3341 Analysis of Algorithms Spring 2012 |
Graph of Capitals in USA
|
Graph construction: 48 mainland US capitals. Data from file: capsdistnum.txt | |||||||||
---|---|---|---|---|---|---|---|---|---|
// graph.c: set up data structure for graph // Uses adjacency list representation #include <stdio.h> #include <stdlib.h> #define GRAPHSIZE 48 struct graphnode { //node for graph's vertex struct edgenode* firstedgenode; // other vertex info here }; struct edgenode { //holds graph's edge info int vertexnum; int edgedist; struct edgenode* nextedgenode; // other edge info here }; void printgraph(struct graphnode* graph[], int); struct graphnode* newgraphnode(); struct edgenode* newedgenode(int , struct edgenode* , int ); void insert(struct graphnode* [], int, int, int); int main() { struct graphnode* graph[GRAPHSIZE]; int i; int num1, num2, num; for(i = 0; i < GRAPHSIZE; i++) graph[i] = NULL; FILE *infile; infile = fopen("capsdistnum.txt", "r"); if (infile == NULL) { fprintf(stderr, "Can't open %s\n", "source.txt"); exit(1); } while (fscanf(infile, "%i%i%i", &num1,&num2,&num) != EOF) { // carry out insertions, both directions insert(graph, num1, num2, num); insert(graph, num2, num1, num); } printgraph(graph, GRAPHSIZE); } struct graphnode* newgraphnode(){ struct graphnode* nnode = malloc(sizeof(struct graphnode)); nnode -> firstedgenode = NULL; // initialize other vertex info here return nnode; } struct edgenode* newedgenode(int num, struct edgenode* node, int dist) { struct edgenode* nnode = malloc(sizeof(struct edgenode)); nnode -> vertexnum = num; nnode -> nextedgenode = node; nnode -> edgedist = dist; // initialize other edge info here return nnode; } void insert(struct graphnode* graph[], int num1, int num2, int dist){ // patch the new node in at the start struct graphnode* node = graph[num1]; if (node == NULL) { struct graphnode* gnode = newgraphnode(); graph[num1] = gnode; struct edgenode* enode = newedgenode(num2, NULL, dist); graph[num1] -> firstedgenode = enode; } else { struct edgenode* enode = newedgenode(num2, graph[num1] -> firstedgenode, dist); graph[num1] -> firstedgenode = enode; } } void printgraph(struct graphnode* graph[], int count) { int i; for (i = 0; i < count; i++) { printf("%2i: ", i); struct edgenode* node = graph[i] -> firstedgenode; while (node != NULL) { printf("[%2i,%3i]", node -> vertexnum, node -> edgedist); node = node -> nextedgenode; if (node != NULL) printf(","); else printf("\n"); } } } |
|
Complete Structure of the Internal Graph Representation (undirected graph, so each edge appears twice) | |
---|---|
First node | Second nodes of edges and distances, starting with the first one at the left |
0: [ 2,535],[ 1,129],[ 4,755] 1: [ 2,663],[ 6,541],[ 5,534],[ 4,713],[ 0,129] 2: [ 3,160],[ 6,441],[ 1,663],[ 0,535] 3: [ 6,619],[ 2,160] 4: [ 5,652],[ 7,476],[ 1,713],[ 0,755] 5: [ 6,338],[ 9,435],[ 8,488],[ 4,652],[ 1,534] 6: [10,438],[ 9,727],[ 5,338],[ 3,619],[ 2,441],[ 1,541] 7: [ 8,355],[12,585],[11,697],[ 4,476] 8: [ 9,100],[14,486],[13,536],[12,626],[ 7,355],[ 5,488] 9: [10,675],[15,455],[14,444],[ 8,100],[ 6,727],[ 5,435] 10: [16,624],[15,742],[ 9,675],[ 6,438] 11: [12,388],[18,504],[17,430],[ 7,697] 12: [13,293],[19,416],[18,337],[11,388],[ 8,626],[ 7,585] 13: [14,165],[19,204],[12,293],[ 8,536] 14: [15,392],[20,187],[19,343],[13,165],[ 9,444],[ 8,486] 15: [16,215],[21,404],[20,490],[14,392],[10,742],[ 9,455] 16: [21,435],[15,215],[10,624] 17: [18,416],[22,150],[11,430] 18: [19,340],[26,344],[22,253],[17,416],[12,337],[11,504] 19: [20,255],[23,192],[27,562],[26,453],[18,340],[14,343],[13,204],[12,416] 20: [21,244],[24,279],[23,291],[19,255],[15,490],[14,187] 21: [24,258],[20,244],[16,435],[15,404] 22: [26,392],[25,242],[18,253],[17,150] 23: [24,249],[28,190],[27,415],[20,291],[19,192] 24: [29,614],[23,249],[21,258],[20,279] 25: [26,282],[31,160],[30,205],[22,242] 26: [27,203],[32,597],[36,530],[31,255],[25,282],[22,392],[19,453],[18,344] 27: [28,145],[34,186],[33,197],[32,532],[26,203],[23,415],[19,562] 28: [29,244],[34,175],[27,145],[23,190] 29: [34,237],[28,244],[24,614] 30: [31,252],[25,205] 31: [36,434],[35,212],[30,252],[26,255],[25,160] 32: [33,302],[37,129],[36,156],[27,532],[26,597] 33: [34,160],[38,354],[37,397],[32,302],[27,197] 34: [38,425],[33,160],[29,237],[28,175],[27,186] 35: [36,200],[31,212] 36: [35,200],[32,156],[31,434],[26,530] 37: [38,103],[39, 62],[33,397],[32,129] 38: [41,268],[40,127],[39,124],[37,103],[34,425],[33,354] 39: [40,108],[38,124],[37, 62] 40: [41,193],[39,108],[38,127] 41: [42,153],[44,165],[43,111],[40,193],[38,268] 42: [45,106],[44,236],[41,153] 43: [44,101],[46, 72],[41,111] 44: [45, 68],[46, 45],[43,101],[42,236],[41,165] 45: [47,139],[44, 68],[42,106] 46: [44, 45],[43, 72] 47: [45,139] |