Показать сообщение отдельно
  #37  
Старый 30.05.2011, 15:30
Ксюха Ксюха вне форума
Прохожий
 
Регистрация: 22.05.2011
Сообщения: 28
Репутация: 10
По умолчанию

Пронумеровать позиции в матрице (таблице) размером 5*5 следующим образом. Если номер i (l<i<25) соответствует позиции с координатами (х, у), то номер i+1 может соответствовать позиции с координатами (z, w), вычисляемыми по одному из следующих правил:
1) (Z,w)=(x±3,y);
2) (z,w)=(x,y±3);
3) (z,w)=(x±2,y±2).
Требуется:
а) написать программу, которая последователь¬но нумерует позиции матрицы 5*5 при заданных ко¬ординатах позиции, в которой проставлен номер 1 (результаты должны быть представлены в виде за¬полненной матрицы);
б) вычислить число всех возможных расстановок номеров для всех начальных позиций, расположенных в правом верхнем треугольнике матрицы, включая ее главную диагональ.
Пример. Если в качестве начальной позиции в матрице выбрана позиция с координатами (2, 2), то на данном шаге координаты позиции с номером 2 в соответствии с представленными правилами могут быть: (2, 5), (5, 2) или (4, 4) (на рис. они помечены звездочкой).
Нашла решение под б) только для левого нижнего треугольника и диагонали
Код:
Const   dx:array[1..8] of integer=(3,-3,0,0,2,2,0,-2,-2);
 dy:array[1..8] of integer=(0,0,3,-3,2,-2,2,-2);
(массивы dx и dyописывают все М правил перемещения)
Var a:array[-2..8,-2..8] of integer;
 x,y,i,n:integer;
procedure rec(x,y:integer);
var j,x1,y1:integer;
begin
i:=i+1; a[x,y]:=i;
if i:=25 then n:=n+1
  else
for j:=1 to 8 do
begin
x1:=x+dx[j]; y1:=y+dy[j];
if a[x1,y1]=0 then rec(x1,y1);
end;
i:=i-1; a[x,y]:=0;end;
begin
for x:=-2 to 8 do
   for y:=-2 to 8 do a[x,y]:=-1;
for x:=1 to 5 do
  for y:=1 to 5 do 
a[x,y]:=0;
for x:=1 to 5 do
begin
for y:=1 to x do
begin
n:=0; i:=0;
rec(x,y);
write(n:4);end; writeln;end;end.
Админ: Теги! Теги! Теги!

вот и совсем не знаю что делать с А
Ответить с цитированием