Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2008, 18:43   #1
Flamik
Новичок
Джуниор
 
Регистрация: 10.05.2008
Сообщений: 2
Счастье Помогите, пожалуйста!

Ребят, очень срочно нужна помощь... Пытаюсь написать программу, а она не идет.... =( В общем, есть обычная доска 8*8 и конь, который ходит во все восемь сторон. С клавиатуры вводятся начальная клетка, где он стоит, клетка, где стоит пешка, и клетка, куда коню надо попасть. Нужно посчитать минимальное количество ходов из начальной клетки в конечную, чтобы конь не заходил на клетку, где стоит пешка.
если кто-нибудь напишет хотя бы алгоритм к этой задачи, буду очень благодарна!!!заранее спасибо=)
Flamik вне форума Ответить с цитированием
Старый 10.05.2008, 19:53   #2
WOLFak
Форумчанин
 
Аватар для WOLFak
 
Регистрация: 30.12.2007
Сообщений: 180
По умолчанию

если пешка стоит на месте то должно работать
это у меня очередь)
Код:
const
 aa:array[1..8,1..2]of integer = ((2,1),(1,2),(-1,2),(-2,1),
 (-2,-1),(-1,-2),(2,-1),(1,-2));
var
 q:array[1..1000,1..3]of integer;
 s:string;
 a:array[1..8,1..8]of boolean;
 y,x,xn,yn,p1,p2,yk,xk,xx,yy,z1,qe,qb,i,o,m,n,k,g,q1,q2:longint;
procedure fileo;
begin
 assign(input,'input.txt'); reset(input);
 assign(output,'output.txt'); rewrite(output);
end;
procedure filec;
begin
 close(input);
 close(output);
end;
begin
 fileo;
 readln(s); { в строке находятся x,y - нфчала и конца в виде например A1 B3}
{терь вводится пешка}
read(p1,p2);
a[p1,p2]:=true;
 xn:=ord(s[1])-64;
 yn:=ord(s[2])-48;
 xk:=ord(s[4])-64;
 yk:=ord(s[5])-48;
     qb:=1;
     qe:=1;
     z1:=0;
     q[1,1]:=xn;
     q[1,2]:=yn;
     q[1,3]:=0;
     a[yn,xn]:=true;
      while qe>=qb do
       begin
        x:=q[qb,1];
        y:=q[qb,2];
        z1:=q[qb,3];
        inc(qb);
        if(y=yk)and(x=xk)then
         begin
          writeln(z1);
          halt;
         end;
         for o:=1 to 8 do
          begin
           xx:=x+aa[o,1];
           yy:=y+aa[o,2];
            if(xx>0)and(yy>0)and(xx<=8)and(yy<=8)and(not a[yy,xx])then
             begin
              inc(qe);
              q[qe,1]:=xx;
              q[qe,2]:=yy;
              q[qe,3]:=z1+1;
              a[yy,xx]:=true;
             end;
          end;
       end;
    filec;
end.
^_^

Последний раз редактировалось WOLFak; 10.05.2008 в 20:02.
WOLFak вне форума Ответить с цитированием
Старый 10.05.2008, 20:35   #3
Flamik
Новичок
Джуниор
 
Регистрация: 10.05.2008
Сообщений: 2
По умолчанию

наверно, это будет совсем уж нагло, а можно как-нибудь объяснить, что в этой прогрмме происходит?
Flamik вне форума Ответить с цитированием
Старый 10.05.2008, 20:44   #4
WOLFak
Форумчанин
 
Аватар для WOLFak
 
Регистрация: 30.12.2007
Сообщений: 180
По умолчанию

ну ээ... лучше сначала изучити что такое очередь)
тогда я думаю все сразу станет понятно)
^_^
WOLFak вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста!!! Esenin Помощь студентам 1 21.06.2008 01:45
Помогите пожалуйста Niki Помощь студентам 4 07.06.2008 08:30
помогите пожалуйста pelsh Помощь студентам 2 21.12.2007 00:26