+int edge_name_compare(edge_t *a, edge_t *b)
+{
+ int result;
+ char *name_a1, *name_a2, *name_b1, *name_b2;
+
+ if(strcmp(a->from->name, a->to->name) < 0)
+ name_a1 = a->from->name, name_a2 = a->to->name;
+ else
+ name_a1 = a->to->name, name_a2 = a->from->name;
+
+ if(strcmp(b->from->name, b->to->name) < 0)
+ name_b1 = b->from->name, name_b2 = b->to->name;
+ else
+ name_b1 = b->to->name, name_b2 = b->from->name;
+
+ result = strcmp(name_a1, name_b1);
+
+ if(result)
+ return result;
+ else
+ return strcmp(name_a2, name_b2);
+}
+
+int edge_weight_compare(edge_t *a, edge_t *b)
+{
+ int result;
+
+ result = a->weight - b->weight;
+
+ if(result)
+ return result;
+ else
+ return edge_name_compare(a, b);
+}
+
+void init_edges(void)