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

Алгоритм Дейкстры, вывести шаги выполнения

25.05.2017, 15:51. Показов 681. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Алгоритм Дейкстры.
Мне надо немного переделать так, чтобы выводило не просто конечный результат, например от 1 к 4: 1 -> 2 -> 5 -> 4, но и промежуточные прохождения (шаги выполнения поиска короткого пути), например от 1 пошло к 2, потом к 3, то есть 1 -> 2, 1 -> 3; потом от 2 пути, например 2 -> 7, 2 -> 5 и т.д.

Я понимаю что это нужно мне взять две переменные которые отвечают за эти вершины, и вывести их через "->", но не могу найти где эту строчку кода вставить.

Помогите пожалуйста, буду очень благодарен


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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
 
using namespace std;
 
const int n = 10;
const int inf = 1000*1000*1000;
 
int start, g[n][n]=
     {
        {0, 20, 25, 30, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 5, 0, 10, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 10, 15, 0, 0, 0},
        {0, 0, 0, 0, 25, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 15, 0, 5, 10, 20},
        {0, 0, 0, 0, 15, 0, 10, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 15, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 10},
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 10},
        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    };
 
int main()
{
    vector <int> d(n+5,inf),p(n+5,-1);
    vector <bool> used(n+5);
    int start = 0, finish = 9,mn,u;
    d[start] = 0;
    for (int i=0;i<n;++i){
        mn = inf, u = -1;
        for (int j=0;j<n;++j)
            if (!used[j] && d[j] < mn)
                mn = d[j], u = j;
        if (u == -1)    break;
        used[u] = true;
        for (int j=0;j<n;++j)
            if (d[j] > d[u] + g[u][j] && g[u][j] > 0 )
                d[j] = d[u] + g[u][j], p[j] = u;
    }
    vector <int> v;
    if (p[finish] == -1)
        cout<<"No way\n";
    else{
        for (int u = finish ; u != -1; u = p[u])
            v.push_back(u);
        reverse(v.begin(),v.end());
        for (int i=0;i<v.size();++i){
            if (i > 0)    cout<<"->";
            cout<<v[i];
        }
    }
    cout<<"\n"<<d[finish]<<"\n";
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2017, 15:51
Ответы с готовыми решениями:

Алгоритм Дейкстры - Вывести не только вес ребер, но и сам путь
Необходимо вывести не только вес ребер, но и сам путь, например: 1-3-5. Помогите, пожалуйста. ...

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

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

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

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

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

Алгоритм Дейкстры
Люди добрые, помогите! Курсовая работа на эту тему. Может кто-нибудь сталкивался.

Алгоритм Дейкстры
Написал алгоритм Дейкстры на F#, но он у меня всегда идёт только по ребрам с минимальным весом (то...

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


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

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

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