ПредишенСледващото

Строго погледнато, съществува проблемът:

Намерете броя на начините за пускане на шахматната дъска на размери 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;= 0) и (Y + ди # 91; и # 93;Inc (а # 91 х + DX # 91; и # 93 ;, у + ди # 91; и # 93, # 93 ;, г)
приключи;

процедура решаване (размер: число); // се бюст
Var
И, Й: longint;
започвам
ако р = 1 и след това изход;

ако размер = к тогава
започвам
Inc (резултат);
край
още

защото: = 0 до п-1 направи
за к: = 0 до п-1 се започне # 91 I, J # 93 ;: = 0; C # 91 I, J # 93 ;: = 0; приключи;

Всъщност: = 1;
защото: = 1 до к направи
Всъщност: = действителност * I;

writeln (резултат Разделение факт);


Така че, алгоритъмът работи, но не се вписва в желаното време се дължи на факта, че смятам "същото" (на състоянието на проблема) режим. Бих искал да се намери начин, който ще позволи да се реши този проблем.

Подкрепете проекта - споделете линка, благодаря!