CS 3343/3341 Analysis of Algorithms |
Graph of Capitals, C Version
|
| Graph construction: 48 mainland US capitals. |
|---|
// graph.c: set up data structure for graph
// Uses adjacency list representation
#include <stdio.h>
#include <stdlib.h>
#define GRAPHSIZE 48
struct node { // node for graph's vertex
struct edge* firstedge; // to entire adj. list
// other vertex info here
};
struct edge { // holds graph's edge info
int nodenum; // head end of edge
int edgelen; // data: here it's distance
struct edge* nextedge; // next edge
// other edge info here
};
void printgraph(struct node* graph[], int nodes);
struct node* newnode();
struct edge* newedge(int num, struct edge* e, int len);
void insert(struct node* graph[], int num1, int num2, int len);
int edgelength(struct node* graph[], int v1, int v2);
int pathlength(struct node* graph[], int path[], int len);
int main() {
struct node* graph[GRAPHSIZE];
int i;
int num1, num2, len;
for(i = 0; i < GRAPHSIZE; i++) graph[i] = newnode();
FILE *infile;
infile = fopen("capsdist.txt", "r");
if (infile == NULL) {
fprintf(stderr, "Can't open %s\n", "source.txt");
exit(1);
}
while (fscanf(infile, "%i%i%i", &num1,&num2,&len) != EOF) {
// carry out insertions, both directions
insert(graph, num1, num2, len);
insert(graph, num2, num1, len);
}
printgraph(graph, GRAPHSIZE);
}
struct node* newnode(){
struct node* nnode = malloc(sizeof(struct node));
nnode -> firstedge = NULL;
return nnode;
}
struct edge* newedge(int num, struct edge* e, int len) {
struct edge* enew = malloc(sizeof(struct edge));
enew -> nodenum = num;
enew -> nextedge = e;
enew -> edgelen = len;
return enew;
}
void insert(struct node* graph[], int num1, int num2, int len){
// patch the new node in at the start
graph[num1] -> firstedge = newedge(num2,
graph[num1] -> firstedge, len);
}
|