Я работаю с перестановками, где каждый элемент отличается от своего исходного местоположения. Я хотел бы, чтобы алгоритм, который {длина ввода, строка и цифра}, дал мне выходной номер. Вот пример:
Если длина ввода равна четырем, то все перестановки 0123:
0123,0132,0213,0231,0312,0321,
1023,1032,1203,1230,1302,1320,
2013,2031,2103,2130,2301,2310,
3012,3021,3102,3120,3201,3210
Перестановки, в которых ни одна цифра не находится в одном и том же месте (каждая цифра переместилась):
1032,1230,1302,
2031,2301,2310,
3012,3201,3210
Нумерация начинается с 0, поэтому, если вход для функции равен {4,0,0}, на выходе должна быть 0-я (самая левая) цифра 0-й (первой) перестановки. Первая цифра 1032 - 1.
Если входное значение равно {4,1,1}, то выходным значением является вторая цифра 1230, которая равна 2.
Номер строки может быть больше числа перестановок. В этом случае возьмите остаток по модулю количества перестановок (в приведенном выше случае строка по модулю 9).
На языке c было бы здорово.
(Это не домашняя работа, это для работы. Хэши с кукушкой, если вы должны знать. Я хотел бы случайным образом выбирать перестановки, которые я буду делать на каждом этапе, чтобы увидеть, лучше ли это, чем BFS, когда число таблиц равно больше двух.)