Задача в Delphi

Тема в разделе "Pascal and Delphi", создана пользователем Nyo, 23 мар 2010.

  1. Nyo

    Nyo Гость

    помогите пожалуйста решить задачу в Делфи.

    18. Задано конечное множество имен жителей некоторого города, причем для каждого из жителей перечислены имена его детей. Жители А и Б называются родственниками, если:
    18.1. либо А — ребенок Б
    18.2. либо Б — ребенок А
    18.3. либо существует некий В такой, что А является родственником В, а В является родственником Б.

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">вот код:</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    matrix:array[0..19,1..19] of integer; // матрица сумежности для графа
    visited:array[0..19] of integer; //массив пройденых точек
    implementation

    {$R *.dfm}
    function na(a:integer):string;//функция возврата имени под номером 0..19
    begin
    if a=0 then
    na:='1';
    if a=1 then
    na:='2';
    if a=2 then
    na:='3';
    if a=4 then
    na:='4';
    if a=5 then
    na:='5';
    if a=6 then
    na:='6';
    if a=7 then
    na:='7';
    if a=8 then
    na:='8';
    if a=9 then
    na:='9';
    if a=10 then
    na:='10';
    if a=11 then
    na:='11';
    if a=12 then
    na:='12';
    if a=13 then
    na:='13';
    if a=14 then
    na:='14';
    if a=15 then
    na:='15';
    if a=16 then
    na:='16';
    if a=17 then
    na:='17';
    if a=18 then
    na:='18';
    if a=19 then
    na:='19';
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    var i,j,k,l,m:integer;
    head,tail,v:word;
    queue:array[0..19] of integer;
    s:string;
    begin
    randomize;
    for i:=0 to 19 do
    for j:=0 to 19 do
    matrix[i,j]:=0;   //очитска матрицы
    for i:=0 to 19 do
    begin
    s:=na(i);
    StringGrid1.Cells[i,0]:= s;          //заполнение первой строки первой таблицы
    m:=random(3);
    for j:=1 to m do
    begin
    l:=random(20);
    while l=i do
    l:=random(20);
    matrix[i,l]:=1;             //Заполняем матрицу сумежности(сторим граф)
    matrix[l,i]:=1;
    StringGrid1.Cells[i,j]:=na(l); //Заполняем рандомно количество и имена гостей
    end;
    end;
    {Поиск в ширину для построеного графа с матрицой сумежности}
    for i:=0 to 19 do
    begin
    for j:=0 to 19 do
    begin
    queue[j]:=-1;
    visited[j]:=-1;
    end;
    queue[0]:=i;
    head:=0;
    tail:=1;
    visited[i]:=1;
    while head<tail do
    begin
    v:=queue[head];
    head:=head+1;
    for k:=0 to 19 do
    if (matrix[v,k]<>0)and(visited[k]=-1) then
    begin
    queue[tail]:=k;
    tail:=tail+1;
    visited[k]:=1;
    end;
    end;
    for l:=0 to tail do
    begin
    if queue[l]<>-1 then
    StringGrid2.Cells[i,l]:=na(queue[l]);
    end;
    end;
    end;

    end.



    что делается в последнем "цикле"?объясните плз!!!!


    for i:=0 to 19 do
    begin
    for j:=0 to 19 do
    begin
    queue[j]:=-1;
    visited[j]:=-1;
    end;
    queue[0]:=i;
    head:=0;
    tail:=1;
    visited[i]:=1;
    while head<tail do
    begin
    v:=queue[head];
    head:=head+1;
    for k:=0 to 19 do
    if (matrix[v,k]<>0)and(visited[k]=-1) then
    begin
    queue[tail]:=k;
    tail:=tail+1;
    visited[k]:=1;
    end;
    end;
    for l:=0 to tail do
    begin
    if queue[l]<>-1 then
    StringGrid2.Cells[i,l]:=na(queue[l]);
    end;

    вот в нем.

    Добавлено: :)
     
Загрузка...

Поделиться этой страницей