Помощь - Поиск - Пользователи - Календарь
Полная версия: задача махараджей обратным методом
Форум «Всё о Паскале» > 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.