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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2009, 11:20   #1
Nextgen
 
Регистрация: 20.12.2009
Сообщений: 7
По умолчанию Нахождение минимального пути по графам

Нахождение минимального пути по графам согласно алгоритмам Дейкстры:

Требуется помощь. Получилась вот такая программа, которая ищет все пути. Но нужно именно минимальный путь, и я не пойму как такое провернуть.

Есть таблица: в таблицу вносим длину пути только в ту ячейку где соед точки. Так же прописываем начальную и конечную точку.
У меня конечно получалось считать длину пути, но только почему то считался дли всех вносимых путей. А отделить один путь от другого не получается. Соответственно и не выходит найти и минимальный путь.

Вот выкладываю код (Так же есть и пример):
Код:
//это в глобальных переменных
int map[10][10]; // Карта.map[i,j]

int road[10];  // если точки i и j соединены
bool incl[10]; // incl[1]равен TRUE, если точка с номером i включена в road

int r;
int  start,finish; // Начальная и конечная точки
bool found;

//дальше идет сама функция
void step(int s, int f, int p)
{
int c;  // Номер точки, в которую делаем очередной шаг
if(s==f)
{found=true;
 Form1->Label1->Caption=Form1->Label1->Caption+'\n'+"Путь:";
 for(int i=0;i<=p-1;i++)
 Form1->Label1->Caption=Form1->Label1->Caption+' '+IntToStr(road[i]);

}
else {
 for(c=0;c<=N;c++)
 if((map[s][c]!=0)&&(!incl[c]))
 {

  road[p]=c;
  incl[c]=true;
  step(c,f,p+1);
  incl[c]=false;
  road[p]=0;



 } }

}

//В содании формы 
for(int i=1;i<12;i++)
{
StringGrid1->Cells[0][i]=IntToStr(i);  // нумерация строк
StringGrid1->Cells[i][0]=IntToStr(i); // нумерация колонок
}

//в событии кнопки 
Label3->Caption="";
// инициализация массивов
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
map[i][j]=0;
for(int i=0;i<10;i++)
{road[i]=0; incl[i]=false;}
// ввод описания карты из SrtingGrid.Cells
for(int i=1;i<12;i++)
for(int j=1;j<12;j++)
if(StringGrid1->Cells[i][j].Length()!=0)
map[j][i]=StrToInt(StringGrid1->Cells[i][j]);

else map[j][i]=0;
start=StrToInt(Edit1->Text);
finish=StrToInt(Edit2->Text);
road[0]=start;// внесем точку в маршрут
incl[start]=true;// пометим ее как включенную
step(start,finish,1);//ищем вторую точку маршрута
// проверим, найден ли хотя бы один путь 
if (!found)
Label3->Caption="Указанные точки не соединены!";
Вложения
Тип файла: rar graphi.rar (327.5 Кб, 21 просмотров)
Nextgen вне форума Ответить с цитированием
Старый 26.12.2009, 15:17   #2
Nextgen
 
Регистрация: 20.12.2009
Сообщений: 7
По умолчанию

Ну есть хоть какие-нибудь идеи этому поводу, помогите хоть чем - нибудь
Nextgen вне форума Ответить с цитированием
Старый 29.12.2009, 23:44   #3
Kilobyte
Новичок
Джуниор
 
Регистрация: 29.12.2009
Сообщений: 1
По умолчанию

http://ru.wikipedia.org/wiki/%D0%90%...82%D1%80%D1%8B
Kilobyte вне форума Ответить с цитированием
Старый 30.12.2009, 14:14   #4
Nextgen
 
Регистрация: 20.12.2009
Сообщений: 7
По умолчанию

Нее, Kilobyte, я знаю что такое алгоритм дейкстры, и знаю как он математически решается, хотя я вот кое -что подправил, но блин все равно косяки. Даже не знаю показывать исходник или нет. Там осталось исправить както нахождение минимального отрезка м/д графами. У меня получается что ищет максимальный, хотя все сделал так как для минимального :-) Поверьте уже не раз искал минимальные значения в массивах)) Ну ладно думаю сам как нибудь сделаю
Nextgen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОСЛЕДНЯЯ МОЯ ТЕМА НА ЭТОМ ФОРУМЕ. TurboPascal: теория графов, определить длину минимального пути методом ulala Помощь студентам 8 23.12.2009 18:55
[C] Нахождение наибольшего простого пути wolfram Помощь студентам 0 29.11.2009 12:33
Поиск минимального и максимального пути в графе!!!! OZZY_91 Помощь студентам 1 18.11.2009 13:20
Нахождение минимального элемента в массиве [Паскаль] pionerka Помощь студентам 4 03.11.2009 16:02
Книги по графам. нахождение пути Rusl92 Паскаль, Turbo Pascal, PascalABC.NET 3 17.12.2008 14:44