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

 



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