Помощь - Поиск - Пользователи - Календарь
Полная версия: задача махараджей обратным методом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
maksimla

7 задача blink.gif
Махараджа - это ферзя и коня свойство в одной фигуре.На картинке показано этой фигуры ходы.
Нажмите для просмотра прикрепленного файла
Напишите программу которая нашла несколькими способами N×N в такой доске размера, чтобы каждая махараджа не угрожала.

Первичные данные записаны в файле duom.txt В единственной строчке записаны два натуральных числа отделены пробелом N и K (K ≤ N ≤ 10).

Результат способов число записывается в файл rez.txt.
первичные данные
4 2
результат
20
дополнительно напишите 7 заданиям генираторы

Я даже непонел почему тут результат 20 и как решить ту безпонятие я .
Lapp
М
Максим, при всем мом уважении к твоему желанию приобрести знания, я должен тебе заметить, что Правила (раздела Задачи) существуют для всех. Цитирую п.6: "Одна тема - один вопрос (задача)". Пожалуйста, раздели тему.



По поводу последней задачи (№7).
Я так понимаю, что задача состоит в том, чтобы найти, сколькими способами можно расставить К фигур (в данном случае - махараджей) на доске NxN, чтобы они не угрожали (не били) друг другу (друга). Подобная задача - но про ферзей - решалась уже на Форуме (в той же теме, что и про рюкзак: Переборные Алгоритмы ). Я думаю, ее можно немного изменить, чтобы она годилась для махарджей.
maksimla
все исправил я сейчас другие темы сделаю.
а почему результат тут в примере 20 не понел я может обьесните?
maksimla
да что такое со мной тут надо было только подставить и все и то чего то плохо результат не выводит и только одно считает
var
{ признак занятости диагоналей первого типа }
up: array[2 .. 16] of boolean;
{ признак занятости диагоналей второго типа }
down: array[-7 .. 7] of boolean;
{ признак занятости вертикали }
vert: array[1 .. 8]of boolean;
{ номер вертикали, на которой стоит ферзь на каждой горизонтали }
ihor: array[1 .. 8]of integer;
n,i,s: integer;
t,z:text;
{ проверка на допустимость хода в позицию (i,j) }
function d_hod(i, j: integer): boolean;
begin
d_hod := vert[j] and up[i+j] and down[i-j];
end;

procedure hod(i, j: integer); { сделать ход }
begin
ihor[i] := j;
vert[j] := false;
up[i+j] := false;
down[i-j] := false;
end;

procedure o_hod(i, j: integer); { отменить ход }
begin
vert[j] := true;
up[i+j] := true;
down[i-j] := true;
end;
procedure print;
var i: integer;
begin
write(' ',s,' ');for i:=1 to n do write(ihor[i],' ');
writeln;
end;
procedure find_all(i: integer);
var j: integer;
begin
if i<=n then begin
for j:=1 to n do
if d_hod(i,j) then begin
hod(i,j);
find_all(i+1);
o_hod(i,j);
end;
end
else begin
inc(s);
print;
end;
end;
begin
assign (t, 'duom.TXT');
assign (z, 'rez.TXT');
reset (t);
rewrite(z);
readln(t,n,i);
find_all(i);
readln;
close(z);
close(t);
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.