Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2009, 19:47   #1
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию Поиск минимального маршрута, ошибка в коде

переношу прогу с Delphi на С++. Все перенес, но работает не правильно
кто занимался поиском кратчайшего маршрута на С++ помогите, тока не консольный вариант))
вот код
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
const
   N=10;//{ кол-во вершин графа}
   int len;                   //{ длинна найденного (минимального) маршрута }
   int c_len;                 //{ длина текущего (формируемого) маршрута }
   int road[N];    //{ Дорога - номера точек карты }
   int map[N][N];//{ Карта. map[i,j]не 0,если точки i и j соединены }
   boolean incl[N];    //{ incl[i]равен TRUE, если точка с номером i включена в road }

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//void printElement(int s;int f;int p)
int step(int s,int f,int p)
{
    int c;//{ Номер точки, в которую делаем очередной шаг }
    int i;
    if (s==f)
    {
   len =c_len;//{ сохраним длину найденного маршрута }
//{ вывод найденного маршрута }
    for (i=1; i < p-1; i++)
        {
        Form1->Label1->Caption =Form1->Label1->Caption+" "+IntToStr(road[i]);
        Form1->Label1->Caption=Form1->Label1->Caption+", длина:"+IntToStr(len);
        }
    }


    else
//          { выберем очередную точку }
    for (c=1; i < N; i++)  //  { проверяем все вершины }
    {

//          if(map[s,c]<> 0)
//          and
//          (NOT incl[c])
//             and(
//            (len=0)
//            or
//            (c_len+map[s,c]< len)
//          )
        if(
        (map[s,c]!= 0)&&
        //(!incl[c]) &&
        (
        (len==0)||
        (c_len+map[s][c]< len)))
        {
        //точка соединена с текущей, но не включена в маршрут}
        road[p]=c;///{ добавим вершину в путь }
        incl[c]=TRUE;//{ пометим вершину как включенную }
        c_len=c_len+map[s][c];
        step(c,f,p+1);
        incl[c]=FALSE;
        road[p]=0;
        c_len=c_len-map[s][c];
        }  }
    return 0;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int start,finish;          //{ Начальная и конечная точки }
   boolean found;
   int i,j;

   Label1->Caption="";
//   { инициализация массивов }
for (i=1; i < N; i++)
{road[i]=0;}
for (i=1; i < N; i++)
{incl[i]=FALSE;}

//   { ввод описания карты из SrtingGrid.Cells}
for (i=1; i < N; i++)
{
       for (j=1; j < N; j++)
          if (StringGrid1->Cells[i][j] != "")
          {
          map[i][j]=StrToInt(StringGrid1->Cells[i][j]);
          }
              else map[i][j]=0;

   len=0;   // длина найденного (минимального) маршрута
   c_len=0; // длина текущего (формируемого) маршрута
   start=StrToInt(Edit1->Text);
   finish=StrToInt(Edit2->Text);

   road[1]=start;//{ внесем точку в маршрут }
   incl[start]=TRUE;//{ пометим ее как включенную }

   step(start,finish,2);//{ищем вторую точку маршрута }

   // проверим, найден ли хотя бы один путь
   if (! found )
       { Label1->Caption="Указанные точки не соединены!"; }
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormActivate(TObject *Sender)
{
int i;
   // нумерация строк
   for (i=0; i < 10; i++)
{
       StringGrid1->Cells[0][i]=IntToStr(i);  }
   // нумерация колонок
   for (i=0; i < 10; i++){
       StringGrid1->Cells[i][0]=IntToStr(i);  }
   // описание предопределенной карты
   StringGrid1->Cells[1][2]='1';
   StringGrid1->Cells[2][1]='1';
   StringGrid1->Cells[1][3]='1';
   StringGrid1->Cells[3][1]='1';
   StringGrid1->Cells[1][4]='1';
   StringGrid1->Cells[4][1]='1';
   StringGrid1->Cells[3][7]='1';
   StringGrid1->Cells[7][3]='1';
   StringGrid1->Cells[4][6]='1';
   StringGrid1->Cells[6][4]='1';
   StringGrid1->Cells[5][6]='1';
   StringGrid1->Cells[6][5]='1';
   StringGrid1->Cells[5][7]='1';
   StringGrid1->Cells[7][5]='1';
   StringGrid1->Cells[6][7]='1';
   StringGrid1->Cells[7][6]='1';
}
//---------------------------------------------------------------------------
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
Paul Hindenburg вне форума Ответить с цитированием
Старый 31.05.2009, 19:48   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Индексы массивов начинаются с нуля, а не единицы
pu4koff вне форума Ответить с цитированием
Старый 31.05.2009, 19:57   #3
Paul Hindenburg
Форумчанин
 
Аватар для Paul Hindenburg
 
Регистрация: 27.07.2007
Сообщений: 123
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Индексы массивов начинаются с нуля, а не единицы
спасибо, но дело не только в индексах(((, я думаю что какое-то из условий не верно
Вложения
Тип файла: rar поиск кратчайшего маршрута.rar (14.9 Кб, 11 просмотров)
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…

Последний раз редактировалось Paul Hindenburg; 31.05.2009 в 20:03.
Paul Hindenburg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск максимального и минимального элемента массива(с существенным дополнением) Dayterius Паскаль, Turbo Pascal, PascalABC.NET 6 20.05.2009 11:37
Поиск минимального (максимального) элемента массива Radamant Помощь студентам 10 24.12.2008 17:44
Ошибка в коде hacknet Компоненты Delphi 12 07.12.2008 14:23
Ошибка в коде nikleb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.03.2008 22:48
Поиск в HTML-коде _SERGEYX_ Работа с сетью в Delphi 15 17.01.2008 12:54