Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.05.2018, 22:25
DayBreak DayBreak вне форума
Прохожий
 
Регистрация: 20.03.2018
Сообщения: 10
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Волновой алгоритм

Реализовать данное задание на делфи.
Сам пытался сделать,но не допераю,что не так.Можете попробовать сделать массив направлений(type Direction=(drRight,drLeft,drUpRight,...) или же сделать 2 массива для координат x,y
Дальше мой недокод,может кому-нибудь поможет
Прошу помочь,если кто-то откликнется.
UPD:в коде у меня закрашенные (непроходимые клетки) равны числу 50



Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids,Math;

type
  TDirection=(drLeft,drRight,drUp,drDown,drRightUp,drRightDown,drLeftUp,drLeftDown);
  {TDirs=record
    drLeft,drRight,drUp,drDown,drRightUp,drRightDown,drLeftUp,drLeftDown:(i,j);

  end;   }

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const

  lock=50;
  x1=2;
  y1=3;
  x2=7;
  y2=1;
type
  ArrDir=array of TDirection;
  Matrix=array [1..100,1..100] {of array} of integer;
  ArrCord=array [1..100] of integer;
var
 p, A:Matrix;
ii,jj,n, x,y,d, k,i,j,Rand1,Rand2:integer;

begin
  n:=StrToInt(Edit1.Text);
  StringGrid1.ColCount:=n+1;
  StringGrid1.RowCount:=n+1;

  for i:=1 to n do
  begin
    StringGrid1.Cells[i,0]:=IntToStr(i);
    StringGrid1.Cells[0,i]:=IntToStr(i);
  end;



  for i:=1 to n do
    for j:=1 to n do
      StringGrid1.Cells[i,j]:='0';


  for k:=1 to 3 do
    begin
      Rand1:=RandomRange(0,n);                        //определяю рандомные запрещенные клетки
      Rand2:=RandomRange(0,n);
     // StringGrid1.Cells[i,j]:='50';
    //  A[Rand1,Rand2]:=50;
      StringGrid1.Cells[Rand1,Rand2]:='50';
    end;

  { SetLength(A,n,n);
   SetLength(p,n,n);  }

   for i:=1 to n do
   for j:=1 to n do
   A[i,j]:=StrToInt(StringGrid1.Cells[i,j]);

   A[x1,y1]:=d;                //помечаю стартовую ячейку


 { for ii:=Low(a) to High(A)-1 do
    for jj:=Low(a) to High(A)-1 do   }

    for i:=1 to n do
      for j:=1 to n do
      begin
      if A[x1,y1]=0 then

        if A[x+1,y-1]=d then
        begin
          A[x+1,y-1]:=d+1;
          P[i,j]:=A[x+1,y-1];
        end;

        if A[x-1,y+1]=d+1 then          //тут ошибка
        begin
          A[x-1,y+1]:=d+1;
          P[i,j]:=A[x-1,y+1];
        end;

        if A[x,y-1]=d+1 then
        begin
          A[x,y-1]:=d+1;
          P[i,j]:=A[x,y-1];
        end;

        if A[x-1,y]=d+1 then
        begin
          A[x-1,y]:=d+1;
          P[i,j]:=A[x-1,y];
        end;

        if A[x+1,y]=d+1 then
        begin
          A[x+1,y]:=d+1;
          P[i,j]:=A[x+1,y];
        end;

        if A[x,y+1]=d then
        begin
          A[x,y+1]:=d+1;
          P[i,j]:=A[x,y+1];
        end;

        if A[x+1,y+1]=d+1 then
        begin
          A[x+1,y+1]:=d+1;
          P[i,j]:=A[x+1,y+1];
        end;

        if A[x-1,y-1]=d+1 then
        begin
          A[x-1,y-1]:=d+1;
          P[i,j]:=A[x-1,y-1];
        end;




    { for i:=Low(a) to High(A) do
       for j:=Low(a) to High(A) do
       StringGrid1.Cells[i,j]:=IntToStr(A[i,j]);     //промежуточный вывод       }


end;
end;
end.

Последний раз редактировалось DayBreak, 05.05.2018 в 00:13.
Ответить с цитированием
  #2  
Старый 05.05.2018, 19:58
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,119
Репутация: 49086
По умолчанию

читаем про алгоритм Дейкстры. Примеров на паскале в сети масса.
Ответить с цитированием
  #3  
Старый 06.05.2018, 14:21
DayBreak DayBreak вне форума
Прохожий
 
Регистрация: 20.03.2018
Сообщения: 10
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
читаем про алгоритм Дейкстры. Примеров на паскале в сети масса.
Если бы все было бы так просто...Мне нужен был алгоритм Ли(волновой)
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter