Строго погледнато, съществува проблемът:
Намерете броя на начините за пускане на шахматната дъска на размери N * N точно K коне, така че нито един от тях удари другия. Всички коне са едни и същи, така че ако някой договореност за размяна двата коня, тя ще има същия режим.
вход
В един ред са две цели числа N (1 <= N <= 6) и K (0 <= K <= N*N).
продукция
Печат на необходимия брой начини.
Направих възложено използването на рекурсивни изброяване:
Var
А, С: масив # 91; 0..20,0..20 # 93; на цяло число;
Q, факт, резултат, J, I, К, N: longint;
DX: масив # 91; # 93 0..7; на число = (- 2, -1, 1, 2, 2, 1, -1, -2);
ди: масив # 91; # 93 0..7; на число = (1, 2, 2, 1, -1, -2, -2, -1);
процедура ход (х, у, г: цяло число); // функция идентифицира всички клетки, които бие кон на х и у координати
Var I: цяло число;
започвам
защото: = 0 до 7 направи
ако (х + DX # 91; и # 93;> = 0) и (х + DX # 91; и # 93;
приключи;
процедура решаване (размер: число); // се бюст
Var
И, Й: longint;
започвам
ако р = 1 и след това изход;
ако размер = к тогава
започвам
Inc (резултат);
край
още
защото: = 0 до п-1 направи
за к: = 0 до п-1 се започне # 91 I, J # 93 ;: = 0; C # 91 I, J # 93 ;: = 0; приключи;
Всъщност: = 1;
защото: = 1 до к направи
Всъщност: = действителност * I;
writeln (резултат Разделение факт);
Така че, алгоритъмът работи, но не се вписва в желаното време се дължи на факта, че смятам "същото" (на състоянието на проблема) режим. Бих искал да се намери начин, който ще позволи да се реши този проблем.