0 / 0 / 1
Регистрация: 20.10.2011
Сообщений: 102
1

помогите, срочно(((неправильно ищет путь

19.12.2011, 20:45. Показов 390. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот прога, она неправильно выводит путь по алгоритму дейкстры

#include<iostream>
#include<fstream>
#include<conio.h>
#include<locale.h>
#include<iomanip>

using namespace std;

int min(int *a); // прототип функции
int **Graf; // объявляем матрицу смежности
int *Label; // объявляем массив меток
int *Active; // объявляем массив
int *pred;//вставка 1
int i,j,k;
int Start, N, M, V, Last;

int main()
{
setlocale(LC_ALL, "Russian");
ifstream input("graf.txt");
input>>N>>M>>Start>>Last;
Graf= new int * [N];
for(i=0;i<N;i++)
{
Graf[i]= new int [N];
}
for(i=0;i<N;i++)
for(j=0;j<N;j++)
Graf[i][j]=0;
for(k=0;k<M;k++)
{
input>>i>>j>>V;
Graf[i][j]=V;
Graf[j][i]=V;
}
cout<<"Матрица смежности(весов):"<<endl;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
cout<<setw(3)<<Graf[i][j];
cout<<"\n";
}
Label= new int [N];
Active= new int [N];
pred=new int[N];// вставка 2
for(i=0;i<N;i++)
{
Active[i]=0;
pred[i]=0;//вставка 3
}
for(i=0;i<N;i++)
Label[i]=32767;
Active[Start]=1;
Label[Start]=0;
i=Start;
cout<<"\nМассив меток:"<<endl;
for(j=0; j<N; j++ )
cout<<Label[j]<<" ";
cout<<"\nМассив пройденных вершин:"<<endl;
for(j=0; j<N; j++ )
cout<<Active[j]<<" ";
do
{
for(j=0;j<N;j++)
if(Graf[i][j]!=0 && Label[j]> Label[i]+ Graf[i][j])
{
Active[j]=1; // помечаем вершину
Label[j]= Label[i]+ Graf[i][j];
pred[j]=i;// вставка 4
cout<<"\nШаг:";
cout<<"\nМассив пройденных вершин:"<<endl;
for(int p=0; p<N; p++)
{
cout<<Active[p]<<" ";
}
cout<<"\nМассив меток:"<<endl;
for(int p=0; p<N; p++ )
cout<<Label[p]<<" ";
cout<<"\n";
}

Active[i]=0;
cout<<"\nШаг:";

cout<<"\nМассив пройденных вершин:"<<endl;
for(int p=0; p<N; p++)
{
cout<<Active[p]<<" ";
}

cout<<"\nМассив меток:"<<endl;
for(int p=0; p<N; p++ )
cout<<Label[p]<<" ";
cout<<"\n";
i=min(Label);
} while(i!=-1);
cout<<"\nМассив пройденных вершин:"<<endl;
for(int p=0; p<N; p++)
{
cout<<Active[p]<<" ";
}
cout<<"\n";
int *Temp;
Temp=new int [N];
j=Last; i=1;
Temp[0]=Last;
while(j!=Start)
{ Temp[i]=pred[j]; i++;j--; }
cout<<"Путь: ";
for(j=i-1;j>=0;j--) cout<<Temp[j]<< " - ";
// вывод результата
cout<<"\nДлина маршрута до "<<Last<<" вершины:"<<Label[Last]<<endl;

getch();
return 0;
}

int min(int *a)
{
int min=32767,k, min_pos=-1;
for(k=0; k<M;k++)
if(a[k]< min && Active[k]==1)
{
min=a[k];
min_pos=k;
}
return min_pos;
}


вот файл graf.txt


6 8 0 5 //количество вершин, количество ребер, стартовая вершина, конечная вершина соответственно
0 1 2
0 4 3
1 2 1
1 3 4
1 4 3
1 5 7
2 5 2
3 4 3

как сделать так , чтобы он правильно выводил путь(т.е. пройденные вершины по порядку)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2011, 20:45
Ответы с готовыми решениями:

Алгоритм Дейкстры неправильно выводит путь
вот прога, но она неправильно выводит путь((( #include&lt;iostream&gt; #include&lt;fstream&gt;...

Ls: getdocumentbykey ищет неправильно
Добрый день, многоуважаемые коллеги! Вот такая вот непонятная штука произошла. У документов есть...

неправильно ищет минимум , обьясните почему
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Поиск по содержимому файлов ищет неправильно
Через поиск файлов и папок по содержимому файлов ищу файлы содержащие слово &quot;самовольно&quot; Результат...

0
19.12.2011, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2011, 20:45
Помогаю со студенческими работами здесь

Помогите срочно срочно. Вирус блокирует все программы.
Всем привет. пожалуйста помоги срочно надо. поймал вирус, блокирует почти все программы, антивирус...

Крупная И Стабильная Компания Ищет Срочно! Программистов 1с 8
Дорогие программисты 1С 8, если кто-то ищет работу, то плиз откликнитесь, или звоните по номеру +...

Компания СИС-Инкорпорэйтед срочно ищет программиста АСУ ТП
Компания СИС-Инкорпорэйтед срочно ищет программиста АСУ ТП. Инженер-программист АСУ ТП: ...

Отсортировать массив, который ищет самый короткий путь до точки
Дорогие форумчане, прошу вашей помощи. Пытаюсь написать алгоритм для монстра в игре. Алгоритм...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru