ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1298. Конь

Забавно
Послано Michail Yudin 14 янв 2009 18:21
моя прога
Uses SysUtils,Math;
  {$APPTYPE CONSOLE}
var i,f,j,n,c,x,y,x1,y1:integer;
    a:array [-1..10,-1..10] of byte;
    b:array[1..8] of char=('a','b','c','d','e','f','g','h');
procedure proc(k,l:integer);
var min,i1,j1:integer;
begin
  for i1:=-2 to 2 do
    for j1:=-2 to 2 do
      if (abs(i1)+abs(j1)=3) and (a[k+j1,l+i1]=0) then
        inc(min);
  if min<c then
  begin
  c:=min;
  x1:=k;
  y1:=l
  end;

end;
begin
  {$ifndef online_judge}
  reset(input,'input.txt');
  rewrite(output,'output.txt');
  {$endif}
  fillchar(a,sizeof(a),1);
  readln(n);
  for i:=1 to n do
    for j:=1 to n do
      a[i,j]:=0;

  case n of
  1:writeln('a1');
  2:writeln('IMPOSSIBLE');
  3:writeln('IMPOSSIBLE');
  4:writeln('IMPOSSIBLE') else
  begin
    x:=1;
    y:=1;
    f:=0;
    repeat
    c:=10;
    a[x,y]:=1;
    writeln(b[x],y);
    for i:=-2 to 2 do
      for j:=-2 to 2 do
        if (abs(i)+abs(j)=3) and (a[x+j,y+i]=0) then
        proc(x+j,y+i);
    inc(f);
    x:=x1;
    y:=y1;
    until f>=sqr(n);
    end;
  end;

  end.
Фишка в том, что прога оптимально(!) обходит псведошахматную доску с заданными размерами ребер n<=8 и находит решение по обходу доски конем, чтобы он только один раз наступал на одно поле(я проверял), но правда, поскольку решение отличается от того что в тестах, приишлось сдать массивом конастант... обидно. Если есть возражения, пишите!