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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2011, 15:57   #1
ruPy
Пользователь
 
Аватар для ruPy
 
Регистрация: 13.12.2007
Сообщений: 11
Восклицание Алгоритм борохлит где-то!

Алгоритм ищет мин длину до всех вершин, нодает сбой при подсчете нескольких вершин, не могу понять из-за чего именно.
На алгоритм Дейкстры ссылать не надо! Надо доработать этот
Изначально Vh - вся false, a Path -обнулен
Код:
int elem=0, S=1;
int C=StrToInt(Edit1->Text);
int iz=StrToInt(Edit2->Text);
while(S<C){
for(int i=1;i<=C;i++){
        if(StrToInt(StringGrid1->Cells[i][iz])!=0&(Vh[i][iz]!=true||Vh[iz][i]!=true)){//если путь не 0 и данную вершину не посещали
                Path[0]=StrToInt(StringGrid1->Cells[i][iz]);   //записываем в паф(0)
                if(Path[i]==0){ //если путь 0 то 
                        Path[i]=Path[0]+Path[iz];}//записываем нов путь+расст до него 

                if((Path[iz]+Path[0])<Path[i]){
                        Path[i]=Path[0]+Path[iz]; //если имеющ путь>нынешнего то записываем нов путь
                        elem=i;//запоминаем вершину
                        ind=1;}
                if(Path[i]<=(Path[0]+Path[iz])){// если имеющ путь<нынешнего то оставляем путь
                                Path[i]=Path[i];  
                                elem=i;
                                ind=1;}

                                                        }

                     }
if(ind==1){
Vh[elem][iz]=true; //отмечаем что посетили вершину и она имеет уже мин путь
iz=elem;      //указываем что пойдем из вершины с мин длиной
ind=0;
           }
S++;                  }
Внимание вопрос: при нахождении в матр 4х4 с данными (см матрицу ниже) выдает длину до 4ой вершины 9 (начальная 1 вершина), а если убрать
0 3 5 0
3 0 0 1
5 0 0 4
0 1 4 0
из строки if(Path[i]==0){
Path[i]=Path[0]+Path[iz];} Паф(из), т.е. Path[i]=Path[0]; оставить только это то считает правильно но увеличивая кол во вершин и т.д. опять фигня из зи того что не учитывается Path[iz]
В каждом нашем действии есть смысл...Но иногда его трудно найти.

Последний раз редактировалось ruPy; 17.01.2011 в 16:16.
ruPy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написал программу, где то ошибка, не пойму где... Kelevra91 Общие вопросы C/C++ 5 17.01.2011 16:38
Как узнать, где маленькие буквы в пароле, а где большие? Галактика Свободное общение 12 15.09.2010 20:05
где-то ошибаюсь, а где не пойму!укажите ошибку <<Katushka>> Общие вопросы C/C++ 2 15.05.2010 11:41
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26