Комментарии К Задаче.

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
Здравствуйте, помогите, пожалуйста, понять обозначение каждой строки.
Т.е. прокомментируйте каждую строку. Спасибо.

Код:

C++:
// Выполнить
case 5: {
DynamicArray<DynamicArray<float> > Main;
DynamicArray<DynamicArray<int> > Way;
DynamicArray<float> Size;
int One, Now, Min;
AnsiString Str;
Main.set_length(V + 1);
for(I = 1; I <= V; I++) {
Main[I].set_length(V + 1);
for(J = 1; J <= V; J++) {
if (SG1->Cells[J][I] == "")
SG1->Cells[J][I] = "0";
try {
Main[I][J] = StrToFloat(SG1->Cells[J][I]);
}
catch(...) {
SG1->Row = I;
SG1->Col = J;
MessageDlg("Неверное значение!", mtError, TMsgDlgButtons() << mbOK, 0);
return;
}
if (Main[I][J] < 0) {
SG1->Row = I;
SG1->Col = J;
MessageDlg("Неверное значение (<0)!", mtError, TMsgDlgButtons() << mbOK, 0);
return;
}
}
}
Str = "1";
try {
if (!InputQuery("Начальная вершина", "Укажите начальную вершину", Str)) {
return;
}
One = StrToInt(Str);
if (One < 1 || One > V) {
MessageDlg("Вершина V" + IntToStr(One) + " не существует!", mtError, TMsgDlgButtons() << mbOK, 0);
return;
}
}
catch(...) {
MessageDlg("Неверное значение!", mtError, TMsgDlgButtons() << mbOK, 0);
return;
}
Way.set_length(V + 2);
Way[V + 1].set_length(V + 1);
Size.set_length(V + 1);
for(I = 1; I <= V; I++) {
Way[I].set_length(1);
Way[V + 1][I] = 0;
Size[I] = 9999;
}
Size[One] = 0;
F3->M1->Lines->Add("Начальная вершина - V" + IntToStr(One) + ".");
F3->M1->Lines->Add("Кратчайший путь до:");
Now = One;
while (0 != 1) {
for(I = 1; I <= V; I++)
if (Main[Now][I] != 0) {
if (Size[Now] + Main[Now][I] < Size[I]) {
Size[I] = Size[Now] + Main[Now][I];
Way[I].set_length(Way[Now].Length + 1);
for(J = 1; J <= Way[Now].Length - 1; J++)
Way[I][J] = Way[Now][J];
Way[I][Way[I].Length - 1] = Now;
}
}
Way[V + 1][Now] = 1;
Min = 9990;
for(I = 1; I <= V; I++) {
if (Way[V + 1][I] == 0) {
if (Size[I] < Min) {
Min = Size[I];
Now = I;
}
}
}
Str = "";
if (Min == 9990)
break;
}
for(I = 1; I <= V; I++)
if (I != One)
if (Size[I] > 9990)
F3->M1->Lines->Add("V" + IntToStr(I) + " отсутствует!");
else {
Str = "";
for(J = 2; J <= Way[I].Length - 1; J++)
Str += "V" + IntToStr(Way[I][J]) + " ";
Str += "V" + IntToStr(I);
F3->M1->Lines->Add("V" + IntToStr(I) + " = " + FloatToStr(RoundTo(Size[I], -6)) + ". Маршрут: " + Str);
}
F3->ShowModal();
}
break;
 
Статус
Закрыто для дальнейших ответов.