Skip to content

Commit 63f8400

Browse files
committed
fix parsing of adjacency lists for irregular graphs
1 parent 875dd9d commit 63f8400

22 files changed

Lines changed: 596 additions & 198 deletions

CalcGenus/CalcGenus.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,9 @@ adj_t adj_load(char* filename, vertex_t* num_vertices, edge_t* num_edges) {
10301030
for (vertex_t i = 0; i < *num_vertices * VERTEX_DEGREE; i++) {
10311031
assert(fscanf(fp, "%" SCNvertex_t, &adjacency_list[i]) == 1,
10321032
"Error reading the adjacency list from %s\n", filename);
1033-
adjacency_list[i] -= ADJACENCY_LIST_START;
1033+
if (adjacency_list[i] != MAX_VERTICES) {
1034+
adjacency_list[i] -= ADJACENCY_LIST_START;
1035+
}
10341036
}
10351037

10361038
fclose(fp);
@@ -1212,6 +1214,7 @@ cycles_t cycle_generate(adj_t adjacency_list, vertex_t num_vertices,
12121214
} else {
12131215
for (degree_t i = 0; i < VERTEX_DEGREE; i++) {
12141216
vertex_t neighbor = neighbors[i];
1217+
if (neighbor == MAX_VERTICES) continue;
12151218
if (ONLY_SIMPLE_CYCLES ? (neighbor <= path[0]) : (neighbor < path[0])) {
12161219
continue;
12171220
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
9 23
2-
2 7 8 9 65536 65536
3-
1 3 7 8 9 65536
4-
2 4 7 8 9 65536
5-
3 5 7 8 9 65536
6-
4 6 7 8 9 65536
7-
5 7 8 9 65536 65536
2+
2 7 8 9 65535 65535
3+
1 3 7 8 9 65535
4+
2 4 7 8 9 65535
5+
3 5 7 8 9 65535
6+
4 6 7 8 9 65535
7+
5 7 8 9 65535 65535
88
1 2 3 4 5 6
99
1 2 3 4 5 6
1010
1 2 3 4 5 6
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
11 54
2-
2 3 10 11 65536 65536 65536 65536 65536
3-
1 3 10 11 65536 65536 65536 65536 65536
4-
1 2 10 11 65536 65536 65536 65536 65536
5-
5 6 10 11 65536 65536 65536 65536 65536
6-
4 6 10 11 65536 65536 65536 65536 65536
7-
4 5 10 11 65536 65536 65536 65536 65536
8-
8 9 10 11 65536 65536 65536 65536 65536
9-
7 9 10 11 65536 65536 65536 65536 65536
10-
7 8 10 11 65536 65536 65536 65536 65536
2+
2 3 10 11 65535 65535 65535 65535 65535
3+
1 3 10 11 65535 65535 65535 65535 65535
4+
1 2 10 11 65535 65535 65535 65535 65535
5+
5 6 10 11 65535 65535 65535 65535 65535
6+
4 6 10 11 65535 65535 65535 65535 65535
7+
4 5 10 11 65535 65535 65535 65535 65535
8+
8 9 10 11 65535 65535 65535 65535 65535
9+
7 9 10 11 65535 65535 65535 65535 65535
10+
7 8 10 11 65535 65535 65535 65535 65535
1111
1 2 3 4 5 6 7 8 9
1212
1 2 3 4 5 6 7 8 9
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
10 32
22
3 4 5 6 7 8 9 10
3-
4 5 6 7 8 9 10 65536
4-
1 5 6 7 8 9 10 65536
5-
1 2 6 7 8 9 10 65536
6-
1 2 3 7 8 9 10 65536
7-
1 2 3 4 8 9 10 65536
8-
1 2 3 4 5 9 10 65536
9-
1 2 3 4 5 6 10 65536
10-
1 2 3 4 5 6 7 65536
3+
4 5 6 7 8 9 10 65535
4+
1 5 6 7 8 9 10 65535
5+
1 2 6 7 8 9 10 65535
6+
1 2 3 7 8 9 10 65535
7+
1 2 3 4 8 9 10 65535
8+
1 2 3 4 5 9 10 65535
9+
1 2 3 4 5 6 10 65535
10+
1 2 3 4 5 6 7 65535
1111
1 2 3 4 5 6 7 8
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
11 37
2+
1 2 3 6 9 10 65535
3+
0 2 4 7 9 10 65535
4+
0 1 5 8 9 10 65535
5+
0 4 5 6 7 8 9
6+
1 3 5 6 7 8 9
7+
2 3 4 6 7 8 9
8+
0 3 4 5 7 8 10
9+
1 3 4 5 6 8 10
10+
2 3 4 5 6 7 10
11+
0 1 2 3 4 5 10
12+
0 1 2 6 7 8 9
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
9 20
22
1 2 3 4 5 6 7 8
3-
0 3 4 5 6 7 8 65536
4-
0 3 4 5 6 7 8 65536
5-
0 1 2 65536 65536 65536 65536 65536
6-
0 1 2 65536 65536 65536 65536 65536
7-
0 1 2 65536 65536 65536 65536 65536
8-
0 1 2 65536 65536 65536 65536 65536
9-
0 1 2 65536 65536 65536 65536 65536
10-
0 1 2 65536 65536 65536 65536 65536
3+
0 3 4 5 6 7 8 65535
4+
0 3 4 5 6 7 8 65535
5+
0 1 2 65535 65535 65535 65535 65535
6+
0 1 2 65535 65535 65535 65535 65535
7+
0 1 2 65535 65535 65535 65535 65535
8+
0 1 2 65535 65535 65535 65535 65535
9+
0 1 2 65535 65535 65535 65535 65535
10+
0 1 2 65535 65535 65535 65535 65535

CalcGenus/adjacency_lists/nauty_temp.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
10 29
2-
2 3 4 5 6 65536
3-
2 3 4 7 8 65536
2+
2 3 4 5 6 65535
3+
2 3 4 7 8 65535
44
0 1 3 5 7 9
55
0 1 2 6 8 9
66
0 1 5 6 7 9
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
22 37
22
1 2 20 21
3-
0 3 15 65536
4-
0 5 15 65536
5-
1 18 13 65536
3+
0 3 15 65535
4+
0 5 15 65535
5+
1 18 13 65535
66
17 18 19 12
7-
2 9 21 65536
8-
8 16 7 65536
9-
6 9 10 65536
10-
6 13 15 65536
7+
2 9 21 65535
8+
8 16 7 65535
9+
6 9 10 65535
10+
6 13 15 65535
1111
5 7 10 20
12-
7 9 13 65536
12+
7 9 13 65535
1313
18 20 12 14
1414
4 11 14 15
1515
3 8 10 16
16-
11 12 17 65536
16+
11 12 17 65535
1717
1 2 8 12
1818
6 13 19 21
19-
4 14 19 65536
20-
3 4 11 65536
21-
4 16 17 65536
22-
0 9 11 65536
23-
0 5 16 65536
19+
4 14 19 65535
20+
3 4 11 65535
21+
4 16 17 65535
22+
0 9 11 65535
23+
0 5 16 65535

CalcGenus/explore.ipynb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@
618618
" max_degree = max(g.degree())\n",
619619
" for i in range(len(g.vertices())): # pad adjacency list\n",
620620
" while len(adjacency_list[i]) < max_degree:\n",
621-
" adjacency_list[i].append(65536)\n",
621+
" adjacency_list[i].append(65535)\n",
622622
" with open('adjacency_lists/rome_temp.txt', 'w') as f:\n",
623623
" f.write(f'{len(g.vertices())} {len(g.edges())}\\n')\n",
624624
" for i in range(len(g.vertices())):\n",
@@ -643,7 +643,7 @@
643643
},
644644
{
645645
"cell_type": "code",
646-
"execution_count": 13,
646+
"execution_count": null,
647647
"metadata": {
648648
"vscode": {
649649
"languageId": "python"
@@ -659,7 +659,7 @@
659659
" max_degree = max(g.degree())\n",
660660
" for i in range(len(g.vertices())): # pad adjacency list\n",
661661
" while len(adjacency_list[i]) < max_degree:\n",
662-
" adjacency_list[i].append(65536)\n",
662+
" adjacency_list[i].append(65535)\n",
663663
" with open(filename, 'w') as f:\n",
664664
" f.write(f'{len(g.vertices())} {len(g.edges())}\\n')\n",
665665
" for i in range(len(g.vertices())):\n",
@@ -670,7 +670,7 @@
670670
},
671671
{
672672
"cell_type": "code",
673-
"execution_count": 14,
673+
"execution_count": null,
674674
"metadata": {
675675
"vscode": {
676676
"languageId": "python"
@@ -686,7 +686,7 @@
686686
" file.write(num_vertices.to_bytes(num_bytes, byteorder=\"little\"))\n",
687687
" for v in range(num_vertices):\n",
688688
" for u in adj_list[v]:\n",
689-
" if u == 65536:\n",
689+
" if u == 65535:\n",
690690
" continue\n",
691691
" u = u - min_vertex_id\n",
692692
" if u > v:\n",
@@ -858,7 +858,7 @@
858858
" num_vertices, num_edges = map(int, lines[0].strip().split())\n",
859859
" for i in range(1, len(lines)):\n",
860860
" neighbors = list(map(lambda x: int(x) - START_INDEX, lines[i].strip().split()))\n",
861-
" adjacency_list.append(list(filter(lambda x: x != 65536 - START_INDEX, neighbors)))\n",
861+
" adjacency_list.append(list(filter(lambda x: x != 65535, neighbors)))\n",
862862
" assert len(adjacency_list) == num_vertices\n",
863863
"print(num_vertices, num_edges, adjacency_list)\n",
864864
"\n",

0 commit comments

Comments
 (0)