#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 8
int main() {
int horizontal[8] = {2, 1, -1, -2, -2, -1, 1, 2};
int vertical[8] = {-1, -2, -2, -1, 1, 2, 2, 1};
int tourLengths[65] = {0};
for (int tour = 0; tour < 1000; tour++) {
int board[SIZE][SIZE] = {0};
int currentRow
= rand() % 8; int currentCol
= rand() % 8; board[currentRow][currentCol] = 1;
int moveNumber = 1;
int canMove = 1;
while (canMove) {
int validMoves[8] = {0};
int numValidMoves = 0;
for (int moveType = 0; moveType < 8; moveType++) {
int testRow = currentRow + vertical[moveType];
int testCol = currentCol + horizontal[moveType];
if (testRow >= 0 && testRow < SIZE && testCol >= 0 && testCol < SIZE) {
if (board[testRow][testCol] == 0) {
validMoves[numValidMoves] = moveType;
numValidMoves++;
}
}
}
if (numValidMoves > 0) {
int moveType
= validMoves
[rand() % numValidMoves
]; currentRow += vertical[moveType];
currentCol += horizontal[moveType];
moveNumber++;
board[currentRow][currentCol] = moveNumber;
} else {
canMove = 0;
}
}
tourLengths[moveNumber]++;
}
printf("Tour Length\tFrequency\n"); for (int i = 1; i <= 64; i++) {
if (tourLengths[i] > 0) {
printf("%d\t\t%d\n", i
, tourLengths
[i
]); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCiNkZWZpbmUgU0laRSA4CgppbnQgbWFpbigpIHsKICAgIGludCBob3Jpem9udGFsWzhdID0gezIsIDEsIC0xLCAtMiwgLTIsIC0xLCAxLCAyfTsKICAgIGludCB2ZXJ0aWNhbFs4XSA9IHstMSwgLTIsIC0yLCAtMSwgMSwgMiwgMiwgMX07CiAgICBpbnQgdG91ckxlbmd0aHNbNjVdID0gezB9OwogICAgCiAgICBzcmFuZCh0aW1lKE5VTEwpKTsKCiAgICBmb3IgKGludCB0b3VyID0gMDsgdG91ciA8IDEwMDA7IHRvdXIrKykgewogICAgICAgIGludCBib2FyZFtTSVpFXVtTSVpFXSA9IHswfTsKICAgICAgICBpbnQgY3VycmVudFJvdyA9IHJhbmQoKSAlIDg7CiAgICAgICAgaW50IGN1cnJlbnRDb2wgPSByYW5kKCkgJSA4OwogICAgICAgIGJvYXJkW2N1cnJlbnRSb3ddW2N1cnJlbnRDb2xdID0gMTsKICAgICAgICBpbnQgbW92ZU51bWJlciA9IDE7CiAgICAgICAgaW50IGNhbk1vdmUgPSAxOwoKICAgICAgICB3aGlsZSAoY2FuTW92ZSkgewogICAgICAgICAgICBpbnQgdmFsaWRNb3Zlc1s4XSA9IHswfTsKICAgICAgICAgICAgaW50IG51bVZhbGlkTW92ZXMgPSAwOwoKICAgICAgICAgICAgZm9yIChpbnQgbW92ZVR5cGUgPSAwOyBtb3ZlVHlwZSA8IDg7IG1vdmVUeXBlKyspIHsKICAgICAgICAgICAgICAgIGludCB0ZXN0Um93ID0gY3VycmVudFJvdyArIHZlcnRpY2FsW21vdmVUeXBlXTsKICAgICAgICAgICAgICAgIGludCB0ZXN0Q29sID0gY3VycmVudENvbCArIGhvcml6b250YWxbbW92ZVR5cGVdOwoKICAgICAgICAgICAgICAgIGlmICh0ZXN0Um93ID49IDAgJiYgdGVzdFJvdyA8IFNJWkUgJiYgdGVzdENvbCA+PSAwICYmIHRlc3RDb2wgPCBTSVpFKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGJvYXJkW3Rlc3RSb3ddW3Rlc3RDb2xdID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRNb3Zlc1tudW1WYWxpZE1vdmVzXSA9IG1vdmVUeXBlOwogICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZE1vdmVzKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobnVtVmFsaWRNb3ZlcyA+IDApIHsKICAgICAgICAgICAgICAgIGludCBtb3ZlVHlwZSA9IHZhbGlkTW92ZXNbcmFuZCgpICUgbnVtVmFsaWRNb3Zlc107CiAgICAgICAgICAgICAgICBjdXJyZW50Um93ICs9IHZlcnRpY2FsW21vdmVUeXBlXTsKICAgICAgICAgICAgICAgIGN1cnJlbnRDb2wgKz0gaG9yaXpvbnRhbFttb3ZlVHlwZV07CiAgICAgICAgICAgICAgICBtb3ZlTnVtYmVyKys7CiAgICAgICAgICAgICAgICBib2FyZFtjdXJyZW50Um93XVtjdXJyZW50Q29sXSA9IG1vdmVOdW1iZXI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjYW5Nb3ZlID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b3VyTGVuZ3Roc1ttb3ZlTnVtYmVyXSsrOwogICAgfQoKICAgIHByaW50ZigiVG91ciBMZW5ndGhcdEZyZXF1ZW5jeVxuIik7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSA2NDsgaSsrKSB7CiAgICAgICAgaWYgKHRvdXJMZW5ndGhzW2ldID4gMCkgewogICAgICAgICAgICBwcmludGYoIiVkXHRcdCVkXG4iLCBpLCB0b3VyTGVuZ3Roc1tpXSk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9