source: doc/proposals/modules-alvin/examples/graph/2_tshell/graph.c@ 6fe4a7f

Last change on this file since 6fe4a7f was 7640ff5, checked in by Alvin Zhang <alvin.zhang@…>, 2 months ago

add graph example for modules proposal

  • Property mode set to 100644
File size: 1.1 KB
Line 
1module;
2
3import graph/node;
4import graph/edge;
5
6import stdlib;
7
8export struct Graph {
9 struct Node *nodes;
10 struct Edge *edges;
11 int num_nodes;
12 int num_edges;
13};
14
15export struct Graph create_rand_graph(int num_nodes, int num_edges) {
16 struct Graph g;
17 g.num_nodes = num_nodes;
18 g.num_edges = num_edges;
19 g.nodes = (struct Node *) calloc(num_nodes, sizeof(struct Node));
20 g.edges = (struct Edge *) calloc(num_edges, * sizeof(struct Edge));
21 for (int i=0; i<num_edges; ++i) {
22 struct Node *first = grab_random_node(&g), *second = grab_random_node(&g);
23 g.edges[i] = create_edge(first, second);
24 add_edge(first, &g.edges[i]);
25 add_edge(second, &g.edges[i]);
26 }
27 return g;
28}
29
30export struct Node *grab_random_node(struct Graph *g) {
31 return &g->nodes[rand() % g->num_nodes];
32}
33
34const int max_steps_to_walk = 1000;
35export int path_found(struct Node *first, struct Node *second) {
36 return random_search(first, second, max_steps_to_walk);
37}
38
39export int destroy_graph(struct Graph *g) {
40 free(g->nodes);
41 free(g->edges);
42 return 0;
43}
Note: See TracBrowser for help on using the repository browser.