Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 32
1

Алгоритм Дейкстры с рандомной матрицей

03.11.2015, 23:22. Показов 965. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо, чтобы при запуске программы создавалась рандомная матрица 9x9 в которой:
рандом генерируется по всей матрице, кроме главной диагонали (она нулевая) и нулевыми элементами являются в 1й строке и 1м столбце все, кроме mas[1][6],mas[1][7],mas[1][9]. (Естественно, эта связь будет указана и в mas[6][1], mas[7][1], mas[9][1] т.е. в матрице "связаны" 1я и 6я вершина, 1я и 7я, 1я и 9я.) А остальные связаны друг с другом,поэтому везде рандом.
И по ней должен работать алгоритм Дейкстры. (В интернете много вариантов с вводом данных с клавиатуры, мне такой вариант ввода не подходит )
Подскажите пожалуйста,как реализовать, я уже запутался
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2015, 23:22
Ответы с готовыми решениями:

Алгоритм Дейкстры
Ребятушки, помогите, пожалуйста. Нужна реализация алгоритма дейкстры на паскале, а именно вот этого...

Алгоритм Дейкстры
Пожалуйста, можете указать где у меня ошибка(лучше всего укажите как её исправить) var...

Алгоритм Дейкстры
Написал программу, проверил код, в MVS6 С++ компилируется без ошибок. Но вот не задача, программа...

Алгоритм Дейкстры
procedure TForm2.Button2Click(Sender: TObject); var q:integer;//ввод с edit pr,sr:integer; ...

4
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
03.11.2015, 23:27 2
код есть?
0
0 / 0 / 0
Регистрация: 10.05.2013
Сообщений: 32
04.11.2015, 00:13  [ТС] 3
К примеру, этот. Был выложен на нашем форуме
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
112
113
114
115
116
117
118
119
120
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include<iomanip.h>
    
char NEWT[256];
char*RUS(char*TEXT) {
CharToOem(TEXT,NEWT);
return NEWT;}
 
int v;
int main()
{   int i,j;
   int infinity=1000;                     // Бесконечность
                                          // Количество вершин в графе
   int VES[100][100];                         // Матрица весов графа
 
   int x[100];                            //Массив, содержащий единицы и нули для каждой вершины,
                                          // x[i]=0 - еще не найден кратчайший путь в i-ю вершину,
                                          // x[i]=1 - кратчайший путь в i-ю вершину уже найден
   
   int DlinaPuti[100];                    //t[i] - длина кратчайшего пути от вершины s в i
 
   int PredVertex[100];                   //h[i] - вершина, предшествующая i-й вершине
                                          //на кратчайшем пути
   int VERTEX;
   int p;                         
cout<<RUS("Ввести количество вершин в графе ")<<endl;
cin>>VERTEX;p= VERTEX;                    //Число вершин в графе
cout<<RUS("Заполните матрицу весов графа ")<<endl;      // Матрица весов графа
cout<<setw(4);
for (i=0;i<VERTEX;i++)
cout<<RUS("|x")<<i+1;
cout<<endl;
 
for(i=0;i<VERTEX;i++)
{cout<<RUS("X")<<i+1<<'|';
for(j=0;j<VERTEX;j++)
cin>>VES[i][j];}
 
                                        // Будем искать путь из вершины s в вершину g по циклу
   int start;                           // Номер исходной вершины
   int end;                             // Номер конечной вершины
N: cout<<RUS("Введите стартовую вершину: ");    // Номер может изменяться от 0 до p-1
   cin>>start;
   if (start>(p-1) && start<0) {cout<<RUS("Нет такой вершины повторите ввод...")<<endl; goto N; } // на случай неверных данных
   start=start-1;                       //так как массив начинается с 0 отнимаем от вводимой цифры 1
   for (int prosto=0;prosto<VERTEX;prosto++)
   {end=prosto;                         //цикл прогоняет алгоритм Флойда p-ое количество раз преврашая его в алгоритм Дейкстры  
   if (end==start) continue;            //исключаем просчет растояния между одной и той же точкой
   else
   {
 
                                         // Инициализируем начальные значения массивов
   int u;                                // Счетчик вершин
   for (u=0;u<p;u++)
   {
       DlinaPuti[u]=infinity;                    //Сначала все кратчайшие пути из s в i 
                                         //равны бесконечности
      x[u]=0;                            // и нет кратчайшего пути ни для одной вершины
   }
   PredVertex[start]=0;                     // s - начало пути, поэтому этой вершине ничего не предшествует
   DlinaPuti[start]=0;                      // Кратчайший путь из s в s равен 0
   x[start]=1;                              // Для вершины s найден кратчайший путь
   v=start;                                 // Делаем s текущей вершиной
   
   while(1)
   {
                                        // Перебираем все вершины, смежные v, и ищем для них кратчайший путь
      for(u=0;u<p;u++)
      {
         if(VES[v][u]==0)continue;      // Вершины u и v несмежные
         if(x[u]==0 && DlinaPuti[u]>DlinaPuti[v]+VES[v][u]) //Если для вершины 'u' еще не 
                                        //найден кратчайший путь
                                        // и новый путь в 'u' короче чем 
                                        //старый, то
         {
            DlinaPuti[u]=DlinaPuti[v]+VES[v][u];            //запоминаем более короткую длину пути в
                                        //массив t[и]
           PredVertex[u]=v;                     //запоминаем, что v->u часть кратчайшего 
                                        //пути из s->u
         }
      }
 
                                         // Ищем из всех длин некратчайших путей самый короткий
      int w=infinity;                   // Для поиска самого короткого пути
      v=-1;                             // В конце поиска v - вершина, в которую будет 
                                        // найден новый кратчайший путь. Она станет 
                                        // текущей вершиной
      for(u=0;u<p;u++)                  // Перебираем все вершины.
      {
         if(x[u]==0 && DlinaPuti[u]<w)           // Если для вершины не найден кратчайший 
                                         // путь и если длина пути в вершину 'u' меньше
                                         // уже найденной, то
         {
            v=u;                         // текущей вершиной становится 'u'-я вершина
            w= DlinaPuti[u];
         }
      }
      if(v==-1)
      {
         cout<<RUS("Нет пути из вершины ")<<start+1;cout<<RUS(" в вершину ")<<end+1<<"."<<endl;
         break;
      }
      if(v==end)                            // Найден кратчайший путь,
      {                                 // выводим его
         cout<<RUS("Кратчайший путь из вершины ")<<start+1;cout<<RUS(" в вершину ")<<end+1<<":";
       u=end;
       while(u!=start)
         {
            cout<<" "<<u+1;
            u=PredVertex[u];
         }
         cout<<" "<<start+1<<RUS(". Длина пути - ")<< DlinaPuti[end];cout<<endl;
       break;
      }
      x[v]=1;
   }}}
   
return 0;}
0
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
04.11.2015, 00:29 4
Цитата Сообщение от _Valera_ Посмотреть сообщение
код есть?
Цитата Сообщение от I94 Посмотреть сообщение
К примеру, этот. Был выложен на нашем форуме

собственного производства с вопросами об ошибках
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
04.11.2015, 01:43 5
Цитата Сообщение от I94 Посмотреть сообщение
В интернете много вариантов с вводом данных с клавиатуры, мне такой вариант ввода не подходит
вот это большая проблема
0
04.11.2015, 01:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2015, 01:43
Помогаю со студенческими работами здесь

Алгоритм Дейкстры
Не работает алгоритм Дейкстры. Вот код программы: uses crt,BaseInterpolations, GraphOptimized,...

Алгоритм Дейкстры
Вот рисунок по которому нада найти кратчайший путь от 1 вершины помагите плизз

Алгоритм Дейкстры
Всем доброго времени суток! Прошу помочь юному джуниору разобраться с алгоритмом дейкстры для...

Алгоритм Дейкстры
Всем привет Нужно написать Алгоритм Дейкстры, я написал консольную программу, а нужно с...


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

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