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

Алгоритм Дейкстры(нерабочий) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Элементы очереди http://www.cyberforum.ru/cpp-beginners/thread267832.html
Всем привет... Помогите доработать процедуру.... Вот в этой процедуре не могу разобраться с указателями чтобы добавить элементы в конец очереди void add(int add_num) { int i; node *v,*p; if(i % 2 !=0) { v=new node; v->info=i; v->next=p->NULL;
C++ Диалог Реализовать в программе диалог с помощью меню, для выполнения указанных в задании действий, и контроль ошибок. при вводе. http://www.cyberforum.ru/cpp-beginners/thread267823.html
C++ Про две группы
Анкета для опроса населения содержит две группы вопросов. Первая группа содержит сведения о респонденте: • возраст; • пол; • образование (начальное, среднее, высшее). Вторая группа содержит собственно вопрос анкеты, ответ на который либо ДА, либо НЕТ. Составить программу, используя последовательные классы стандартной библиотеки шаблонов С++, которая: • обеспечивает начальный ввод...
C++ ПРОГАММЫ В MICROSOFT VISUAL STUDIO
Ребята,помоги те кто нибудь,очень срочно надо,напишите программу на языке с++ пожалуйста.. Составить программу для нахождения числа, которое образуется из данного натурального числа при записи его цифр в обратном порядке. Например, для числа 1234 получаем результат 4321.
C++ не могу понять почему не работает std::sort() http://www.cyberforum.ru/cpp-beginners/thread267802.html
#include <vector> #include <algorithm> using namespace std; class T{ public: T(int a_, int b_) : a(a_), b(b_){} bool operator < (T other){
C++ Сортировка методом пузырька(по убыванию) Здравствуйте!Задача такая: Написать функцию, которая сортирует одномерный массив в порядке убывания методом пузырька. В основной программе вызвать эту функцию для двух разных массивов. Вот мой код, но ничего не работает....((( прошу помочь исправить...заранее спасибо... #include <stdio.h> #include <conio.h> #include <stdlib.h> int i,n,a,j; main() { printf("vvedite kol-vo elementov: ");... подробнее

Показать сообщение отдельно
eternalfame
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 7
31.03.2011, 18:24     Алгоритм Дейкстры(нерабочий)
Написал программу по нахождению кратчайшего пути алгоритмом Дейкстры. С простыми примерами программа справляется, но, к примеру, если где-то начиная со второй вершины происходит разветвление, то программа уходит в бесконечный цикл. Суть проблемы вижу - не все элементы матрицы зануляются. Но как сделать программу работоспособной, не знаю) помогите советом...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<sstream.h>
#include<string.h>
 
void null(int n,int arr[20][20])
{
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
      arr[i][j]=0;
}
 
void input(int n,int arr[20][20])
{
  printf ("INPUT YOUR ARR:\n");
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
      scanf ("%d",&arr[i][j]);
}
 
int proverka(int n,int arr[20][20])
{
  int r=0;
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
      {if (arr[i][j]!=arr[j][i])
      r=1;}
  return r;
}
 
void Dxtr(int n,int W,int a,int b,int arr[20][20],int wgt[10],int k,string ms[10])
{
  int j=(a-1);
  int min1,min2;
  ostringstream os;
  do {
  for(int i=0;i<n;i++)
  {
    if (arr[i][j]!=0)
    {
      min1=arr[i][j];
      min2=i+1;
    }
  }
 for(int i=0;i<n;i++)
    if ((arr[i][j]<min1)&&(arr[i][j]!=0))
    {
      min1=arr[i][j];
      min2=i+1;
    }
  W+=arr[min2-1][j];
  if (min2-1==j)
  min2=b;
  os<<(j+1)<<'-'<<(min2)<<' ';
  arr[min2-1][j]=0;
  arr[j][min2-1]=0;
  j=(min2-1);
  }
  while (j!=b-1);
  wgt[k]=W;
  ms[k] = os.str();
  cout << ' ' << ms[k] << ' ' << endl;
}
 
void main()
{
  int n,AdG[20][20];
  printf ("INPUT ARR SIZE = ");
  scanf ("%d",&n);
  error:
  null(n, AdG);
  input(n, AdG);
  proverka(n, AdG);
  if (proverka(n, AdG)==1)
  {
    printf ("ERROR! THIS IS ORGRAPH, NOT GRAPH!\n");
    goto error;
  }
  int bgn,end;
  printf ("\nINPUT START AND END VERTEX = ");
  scanf ("%d %d",&bgn,&end);
  int W=0;
  int Weight[10];
  string marsh[10];
  int k=0;
  int stop;
  do
  {
    goo:
    Dxtr(n,W,bgn,end,AdG,Weight,k,marsh);
    printf ("Weight = %d\n\n",Weight[k]);
    k++;
    for(int p=0;p<n;p++)
      {
        {if(AdG[p][bgn-1]!=0)
        {stop=0; goto goo;}
        else
        continue;   } }
  }
  while (stop!=0);
  int minW=Weight[0];
  int minM=0;
  for (int i=0;i<=k;i++)
   { if ((Weight[i]<minW)&&(Weight[i]!=0))
   { minW=Weight[i]; minM=i; }   }
  char* chr=(char*)marsh[minM].c_str();
  printf ("\n\t\t\t!!WEIGHT = %d!!\n",minW);
  printf ("\n\t\t\t!!PATH =  %s!!\n",strrev(chr));
  getch();
}
Добавлено через 2 минуты
Граф задается весовой матрицей смежности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru