IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Конь Аттилы
Ipse
сообщение 13.04.2007 13:04
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


На шахматной доске стоят белый конь(44, позиция h[5,7]) и черный король(77, позиция h[6,2]). Некоторые поля доски считаются "горящими", на них конь не может наступать (в моем решение они обозначены 99). Конь должен дойти до короля, повергнуть его и вернуться на свое место.При этом ему запрещается становиться на поля, которые уже пройдены.
У меня получается дойти до короля, но как поставить условие чтобы вернуться обратно додумать пока не получается... Прошу подсказать.
 Program aaa;uses crt;
var i,j,n,n2,a,b,c:integer;
    q:boolean;
    dx,dy:array[1..8] of integer;
    h:array[1..8,1..8] of integer;
  s:longint;
procedure try(i,x,y:integer;var q:boolean);
  var k,u,v:integer;q1:boolean;
  BEGIN  k:=0;
  repeat k:=k+1; q1:=false;
    u:=x+dx[k];v:=y+dy[k];s:=s+1;
    if(1<=u)and(u<=n)and(1<=v)and(v<=n)and((h[u,v]=0)or(h[u,v]=77)or(h[u,v]=22)) then
     begin
           if (h[u,v]<>77)then
               h[u,v]:=i else h[u,v]:=77;

         if (h[u,v]<>77) then 
           begin
            try(i+1,u,v,q1);
            if (q1=false) then h[u,v]:=0;  
           end
         else q1:=true;
     end;
  until q1 or (k=8);
  q:=q1;
  END;

begin  clrscr; s:=0;t:=false;
     dx[1]:=2;dx[2]:=1;dx[3]:=-1;dx[4]:=-2;
     dx[5]:=-2;dx[6]:=-1;dx[7]:=1;dx[8]:=2;
     dy[1]:=1;dy[2]:=2;dy[3]:=2;dy[4]:=1;
     dy[5]:=-1;dy[6]:=-2;dy[7]:=-2;dy[8]:=-1;
writeln('Razmer doski:');
readln(n);
  for i:=1 to n do
   for j:=1 to n do
    h[i,j]:=0;
    h[2,1]:=99;h[1,2]:=99;h[2,2]:=99;h[1,3]:=99;h[2,3]:=99;h[1,4]:=99;
    h[2,4]:=99;h[1,7]:=99;h[1,8]:=99;h[2,8]:=99;{}h[8,1]:=99;h[4,3]:=99;
    h[4,4]:=99;h[4,5]:=99;h[4,6]:=99;h[4,7]:=99;h[4,8]:=99;
    h[5,3]:=99;h[5,4]:=99;h[5,5]:=99;h[5,6]:=99;h[5,8]:=99;
    h[6,3]:=99;h[6,4]:=99;h[6,6]:=99;
    h[7,3]:=99;h[7,8]:=99;{}h[8,3]:=99;h[8,6]:=99;
    h[6,2]:=77;
    for i:=1 to n do
         begin
          for j:=1 to n do
           if (h[i,j]<10) then
           write('  ',h[i,j],' ')
           else write(' ',h[i,j],' ');
           writeln;writeln;
         end;
writeln('Poziciya konya:');
   read(i);read(j);writeln;
   n2:=n*n;h[i,j]:=44;
   try(2,i,j,q);
      if q then
        for i:=1 to n do
         begin
          for j:=1 to n do
           if (h[i,j]<10) then
           write('  ',h[i,j],' ')
           else write(' ',h[i,j],' ');
           writeln;writeln;
         end
      else writeln('no path');writeln;
      for i:=1 to n do
         begin
          for j:=1 to n do
           if (h[i,j]<10) then
           write('  ',h[i,j],' ')
           else write(' ',h[i,j],' ');
           writeln;writeln;
         end;
     write(s);
  readkey;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 3:39
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"