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

Найдите кратчайший путь в графе - C++

Восстановить пароль Регистрация
 
baykonurr
10 / 10 / 0
Регистрация: 19.02.2013
Сообщений: 85
05.12.2013, 20:18     Найдите кратчайший путь в графе #1
Создайте граф согласно своего варианта в среде С + +, длины путей задайте самостоятельно, найдите кратчайший путь в графе, используя указанный метод.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 20:18     Найдите кратчайший путь в графе
Посмотрите здесь:

Кратчайший путь в графе. C++
Кратчайший путь в графе(Рекурсия) C++
Кратчайший путь коня с++ C++
C++ Графы кратчайший путь !
Кратчайший путь между вершинами взвешенного графа, в котором есть ребра с отрицательным весом C++
C++ Найти кратчайший путь из вершины u в вершину v
Как найти кратчайший путь в лабиринте? C++
C++ Как найти НЕ Кратчайший путь в графе ?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tsin
05.12.2013, 20:23
  #2

Не по теме:

baykonurr, создал. Теперь ваша очередь.

ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
05.12.2013, 20:28     Найдите кратчайший путь в графе #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
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
 
using namespace std;
 
const int maxe=100,maxv=100;
int ef[maxe],es[maxe],ev[maxe],next[maxe],first[maxv],c=0,i;
vector<long long> d(maxv+1,100000000),p(maxv+1);
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
 
 
void add(int v1,int v2,int value)
{
    next[++c]=first[v1];first[v1]=c;
    ef[c]=v1;es[c]=v2;ev[c]=value;
}
 
void init()
{
    int x,y,z;
    for(i=0;i<5;++i)
    {
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
        add(y,x,z);
    }
}
 
void dist()
{
    int s=1;
    d[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty())
    {
        int to=q.top().second;int line=q.top().first;
        q.pop();
        if(line>d[to])  continue;
        for(int h=first[to];h;h=next[h])
            if(line+ev[h] < d[es[h]])
            {
                d[es[h]]=line+ev[h];
                p[es[h]]=to;
                q.push(make_pair(d[es[h]],es[h]));
            }
    }
}
 
int main()
{
    init();
    dist();
    cout<<d[2]<<endl;
    system("pause");
    return 0;
}
Yandex
Объявления
05.12.2013, 20:28     Найдите кратчайший путь в графе
Ответ Создать тему
Опции темы

Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru