A322750 Number of directed graphs of 2*n vertices each having an in-degree and out-degree of 1 such that the graph specifies a pairwise connected gift exchange with no reciprocal gifts.
0, 0, 2, 48, 2640, 250368, 34110720, 6347520000
Offset: 0
Examples
For n = 0, there are no pairs; a(0) = 0 since no edges exist. For n = 1, there is one pair; a(1) = 0 since requirements 1 and 2 can't be satisfied. For n = 2, there are two pairs; a(2) = 2 graphs given by these edge destinations: ((2, 3), (1, 0)) ((3, 2), (0, 1)) while ((2, 3), (0, 1)) is not allowed because the first and third edges form a 2-vertex walk.
Programs
-
Python
from itertools import permutations as perm def num_connected_by_pairs(assigned, here=0, seen=None): seen = (seen, set())[seen is None] for proposed in [(here - 1, here), (here, here + 1)][(here % 2) == 0]: if proposed not in seen: seen.add(proposed) num_connected_by_pairs(assigned, assigned[proposed], seen) return len(seen) def valid(assigned, pairs): self_give = [assigned[i] == i for i in range(len(assigned))] is_reciprocal = [assigned[a] == i for i, a in enumerate(assigned)] same_pair = [assigned[i] == i + 1 or assigned[i+1] == i for i in range(0, 2*pairs, 2)] if pairs == 0 or True in self_give + is_reciprocal + same_pair: return False num_connected = [num_connected_by_pairs(assigned, here) for here in range(2, 2*pairs, 2)] return min(num_connected) == 2*pairs print([len([x for x in perm(range(2*pairs)) if valid(x, pairs)]) for pairs in range(0, 6)])
Comments