Шахматный номер (3 уровень)

Условие:
Телефонный номер называется “шахматным”, если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных “шахматных” номеров, начинающихся с заданной цифры.
  

1

2

3

4

5

6

7

8

9

 

0

 

 

Технические требования:
Входной файл INPUT.TXT содержит число N [0..9]. Выходной файл OUTPUT.TXT должен содержать единственное число - решение задачи.

Пример файлов входных и выходных данных:

Input.txt

Output.txt

1

136

4

168

5

0

8

104

 

Решение:
Вначале для каждой цифры нужно задать все возможные пути перемещения (конём). Затем, используя рекурсивную процедуру, выполняем поиск всех семизначных номеров, удовлетворяющих условию...

const
  mas:array[0..9,1..3] of integer =
      ((4,6,-1), (6,8,-1), (7,9,-1),
      (4,8,-1), (3,9,0), (-1,-1,-1),
      (1,7,0), (2,6,-1), (1,3,-1), (2,4,-1));
  input = 'input.txt';
  output = 'output.txt';

var
  N:integer;
  Tel:integer;
  f1,f2:text;

procedure Find(digit:integer; count: integer);
var i:integer;
begin
  if digit=-1 then exit;
  if count =7 then begin inc(Tel);exit;end;
  for i:=1 to 3 do
  Find(mas[digit,i],count+1);
end;

begin
  assign(f1,input);
  reset(f1);
  read(f1,n);
  close(f1);

  find(N,1);

  assign(f2,output);
  rewrite(f2);
  write(f2,Tel);
  close(f2);
end.