Форум программистов, компьютерный форум CyberForum.ru

неправильно выводит путь - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в Swap http://www.cyberforum.ru/cpp-beginners/thread410581.html
Написано на С++ Не могу разобраться в ошибки. Раньше не пользовался Swap альтернативы не вижу. Прошу помочь исправить ошибку или предложить замену. #include <iostream> #include <stdlib.h> using namespace std;
C++ Блок-схема, массивы "C" Помогите составить блок схему вот программа: #include<stdio.h> main() { int a,b,c,m,i,k,n1,n2,min,max; printf("Vvedite a(6)\n"); for(i=0;i<6;i++) scanf("%d",&a); printf("‚Vvedite b(8)\n"); http://www.cyberforum.ru/cpp-beginners/thread410577.html
C++ Заполнение двумерной матрицы из текстового файла (для описания графа)
Как заполнить двумерный массив из текстового файла? Например массив a. А текстовый файл mefile.txt имеет след. содержание: 110203 129304 904832 839405 739405 637896
C++ Передача параметров в функции.
Доброе время суток, прошу на примере этих заданий, вкратце объяснить новичку как производится передача параметров в функции через указатели и ссылки. Спасибо за внимание. Большая просьба не посылать на другие источники или литературу. Заранее огромное спасибо! 1. Задана динамическая матрица A (N,N). Напечатать индексы элементов, которые являются наименьшими в своей строке и одновременно...
C++ Очень Нужно исправить ошибку http://www.cyberforum.ru/cpp-beginners/thread410569.html
При компилировании происходит следующее: на строку cout<<"c= "<< pFunc1()<<'\n'; выходит такая ошибка: d:\documents and settings\admin\мои документы\visual studio 2008\projects\14d45\14d45\45.cpp(54) : error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов Вот вся программа: #include <iostream> #include<conio.h>
C++ Функция, вычисляющая сумму и разность двух введённых чисел Начали изучать функции, не получается написать программу на c++, выводящую сумму и разность двух введенных чисел. Основная программа запрашивает два числа и передает их в функцию. Функция реализует вычисления и вывод на экран. подробнее

Показать сообщение отдельно
Stas12
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 102
18.12.2011, 15:36     неправильно выводит путь
вот прога, она неправильно выводит путь по алгоритму дейкстры

#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

как сделать так , чтобы он правильно выводил путь(т.е. пройденные вершины по порядку)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru