Населенные пункты - названия столбцов и строк. Число в пересечении строк и столбцов - расстояние между соответствующими населенными пунктами. Например, для нахождения расстояния между населенными пунктами E и D найдем пересечение строки E и столбца D. На пересечении стоит 1. Значит расстояние между этими населенными пунктами равно одному километру.
Поскольку движение между населенными пунктами двустороннее, длина пути из пункта E в пункт D, равна длине пути из пункта D в пункт E. По этой причине на пересечении строки E и столбца D стоит тоже значение, что и на пересечении строки D и столбца E. То есть матрица симметричная. Главная диагональ матрицы закрашена, поскольку маршрута из населенного пункта в самого себя не существует.
Вот, собственно и весь смысл приведенной таблицы.
Теперь по поводу задания: найти кротчайший путь от населенного пункта B в населенный пункт C.
Рассмотрим строку B (при желании можно и столбец, ведь матрица-то симметричная).
Единственный путь, который ведет из пункта B ведет в пункт A (никаких других значений в строке B нет).
Длина пути BA равна 3 км.
Посмотрим, куда можно попасть из пункта A.В строке A три значения:
1) |AB|=3 км
нам туда не надо, мы только что оттуда вышли
2) |AC|=7 км
Итак, у нас есть длина первого пути: |BC|=|BA|+|AC|=3+7=10 км.
3) |AF|=2 км
Из F можно вернуться в A и попасть в D. Из D можно попасть в С и в тот-же F. Получаем второй маршрут: |BC|=|BA|+|AF|+|FD|+|DC|=3+2+2+3=10 км.
Рассмотрим обратный путь из C в B.
Населенный пункт C соединен с тремя населенными пунктами: A,D и E.
Проезд через A и D мы рассмотрели, остается проезд через E.
|CB|=|CE|+|ED|+|DF|+|FA|+|AB|=1+1+2+2+3=9 км
Ну, вот мы и нашли кротчайший путь, из всех возможных.
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Spin, Math;
type
{ TForm1 }
TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end;
var Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);begin Form1.Label4.Caption:=FloatToStr(tan((StrToFloat(Form1.Edit1.text)*2)+StrToFloat(Form1.Edit2.text)));end;
end.
1) 9 км
Объяснение:
Транспортная задача (классика теории графов).
Населенные пункты - названия столбцов и строк. Число в пересечении строк и столбцов - расстояние между соответствующими населенными пунктами. Например, для нахождения расстояния между населенными пунктами E и D найдем пересечение строки E и столбца D. На пересечении стоит 1. Значит расстояние между этими населенными пунктами равно одному километру.
Поскольку движение между населенными пунктами двустороннее, длина пути из пункта E в пункт D, равна длине пути из пункта D в пункт E. По этой причине на пересечении строки E и столбца D стоит тоже значение, что и на пересечении строки D и столбца E. То есть матрица симметричная. Главная диагональ матрицы закрашена, поскольку маршрута из населенного пункта в самого себя не существует.
Вот, собственно и весь смысл приведенной таблицы.
Теперь по поводу задания: найти кротчайший путь от населенного пункта B в населенный пункт C.
Рассмотрим строку B (при желании можно и столбец, ведь матрица-то симметричная).
Единственный путь, который ведет из пункта B ведет в пункт A (никаких других значений в строке B нет).
Длина пути BA равна 3 км.
Посмотрим, куда можно попасть из пункта A.В строке A три значения:
1) |AB|=3 км
нам туда не надо, мы только что оттуда вышли
2) |AC|=7 км
Итак, у нас есть длина первого пути: |BC|=|BA|+|AC|=3+7=10 км.
3) |AF|=2 км
Из F можно вернуться в A и попасть в D. Из D можно попасть в С и в тот-же F. Получаем второй маршрут: |BC|=|BA|+|AF|+|FD|+|DC|=3+2+2+3=10 км.
Рассмотрим обратный путь из C в B.
Населенный пункт C соединен с тремя населенными пунктами: A,D и E.
Проезд через A и D мы рассмотрели, остается проезд через E.
|CB|=|CE|+|ED|+|DF|+|FA|+|AB|=1+1+2+2+3=9 км
Ну, вот мы и нашли кротчайший путь, из всех возможных.