Created
November 22, 2012 10:37
-
-
Save dsamarin/4130485 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ctype.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
struct node; | |
struct edge; | |
struct node { | |
char *name; | |
struct edge *edges; | |
}; | |
struct edge { | |
struct node *node; | |
struct edge *next; | |
}; | |
static struct edge * create_edge (struct node *to) { | |
struct edge *edge = malloc (sizeof *edge); | |
if (edge) { | |
edge->node = to; | |
edge->next = NULL; | |
} | |
return edge; | |
} | |
static void add_edge (struct edge **to, struct edge *edge) { | |
if (to && edge) { | |
edge->next = *to; | |
*to = edge; | |
} | |
} | |
int main (void) { | |
static char *elements[] = { "alpha", "bravo", "charlie", "delta" }; | |
int size = sizeof elements / sizeof *elements; | |
struct node *nodes[size]; | |
for (int i = 0; i < size; i++) { | |
nodes[i] = malloc (sizeof *nodes); | |
if (!nodes[i]) return EXIT_FAILURE; | |
nodes[i]->name = elements[i]; | |
nodes[i]->edges = NULL; | |
} | |
for (int a = 0; a < size; a++) { | |
for (int b = a + 1; b < size; b++) { | |
char code; | |
int better, worse; | |
printf ("Which is better? [A]: %s [B]: %s $ ", nodes[a]->name, nodes[b]->name); | |
while (isspace (code = getchar ())); | |
code = tolower (code); | |
if (code == 'a') { | |
better = a; | |
worse = b; | |
} else if (code == 'b') { | |
better = b; | |
worse = a; | |
} else { | |
return EXIT_FAILURE; | |
} | |
add_edge (&nodes[better]->edges, create_edge (nodes[worse])); | |
} | |
} | |
for (int i = 0; i < size; i++) { | |
struct edge *edge; | |
printf ("\n%s is better than:\n", nodes[i]->name); | |
edge = nodes[i]->edges; | |
if (edge) { | |
while (edge) { | |
printf ("\t - %s\n", edge->node->name); | |
edge = edge->next; | |
} | |
} else { | |
puts ("\tjack-squat"); | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment