Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Sergey Politov                       2:5015/176.18  15 Mar 2002  06:07:42
 To : Evgeniy Jirnov
 Subject : Re: Поможите pls...
 -------------------------------------------------------------------------------- 
 
 
 До меня дошли слухи, что *14.03.02* *1:18:00* пролетало сообщение
 от Evgeniy к *All* про *"Поможите pls..."*. И я решил вмешаться.
 
  EJ> Сабж. Имеется матрица(лабиринт) 50x50. 1 - стена, 0 - свободно. Hачальные
  EJ> координаты практически от балды(с помощью генератора псевдослуч. чисел).
  EJ> Hайти путь из начальной точки в любую точку на границе массива.
  EJ> Оптимальность пути некритична, главное чтоб он был. Если пути нет, тогда
  EJ> надо это как-то подсчитать. Ежели кто знает как решать подскажите
  EJ> алгоритм. Исходники на C, Pas приветствуются. Спасибо за внимание.
 
   Вообще то иногда надо эху читать, там можно найти ответ на появившийся
 вопрос. Hу в вообще тут подойдет волновой алгорит(поиск в ширину), а
 так же поиск в глубину. Я выбираю второе, его писать проще.
 
 {$A+,B-,D+,E+,F-,G+,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
 {$M 16384,0,655360}
 const
   ox: array[1..4] of integer = (-1,0,1,0);
   oy: array[1..4] of integer = (0,-1,0,1);
 var
   n: integer;
   a,p: array[0..51,0..51] of shortint;
   x,y: integer;
 procedure init;
 var i,j: integer;
 begin
   assign(input, 'dfs.in'); reset(input);
   fillchar(a,sizeof(a),1);
   read(n,x,y);
   for i:= 1 to n do
     for j:= 1 to n do
       read(a[i,j]);
   close(input);
 end;
 procedure dfs(x,y: integer);
 var i: integer;
 begin
   for i:= 1 to 4 do
     if(a[y+oy[i],x+ox[i]]=0)and(p[y+oy[i],x+ox[i]]=0)then
     begin
       p[y+oy[i],x+ox[i]]:= i;
       dfs(x+ox[i],y+oy[i]);
     end;
 end;
 procedure run;
 begin
   fillchar(p,sizeof(p),0);
   p[x,y]:= -1;
   dfs(x,y);
 end;
 procedure wrt(x,y: integer);
 begin
   if p[y,x]<>-1 then wrt(x-ox[p[y,x]],y-oy[p[y,x]]);
   writeln(x,#32,y);
 end;
 procedure done;
 begin
   assign(output, 'dfs.out'); rewrite(output);
   if p[1,1]=0 then writeln('no way') else wrt(1,1);
   close(output);
 end;
 begin
   init; run; done;
 end.
 Искренне Ваш
                Sergey Politov
 
 --- WP/95 Rus 1.78 Релиз 1  Reg.
  * Origin: Metal Invaders. (2:5015/176.18)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Поможите pls...   Evgeniy Jirnov   14 Mar 2002 02:18:00 
 Re: Поможите pls...   ‘ҐаЈҐ© „ў®ап­жҐў   14 Mar 2002 10:58:18 
 Re: Поможите pls...   Sergey Politov   15 Mar 2002 06:07:42 
 Re: Поможите pls...   Konstantin Osmehin   15 Mar 2002 13:31:47 
 Поможите pls...   Igor Bychkov   17 Mar 2002 18:24:13 
 Re: Поможите pls...   Sergey Andrianov   20 Mar 2002 20:07:30 
 Поможите pls...   Sergey Khabarov   20 Mar 2002 18:22:49 
 Re: Поможите pls...   Sergey Andrianov   23 Mar 2002 11:13:30 
Архивное /ru.algorithms/3991494ade0b.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional