Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Niсe
1 / 1 / 0
Регистрация: 09.12.2009
Сообщений: 30

Алгоритм Дейкстры

24.02.2012, 13:27. Показов 695. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
"Для заданных n(1<=n<=500), m(1<=m<=n*n), v1 v2(1<=v1,v2<=n), где n-число вершин неор графа, m - количество ребер, v1 стартовая вершина v2 конечная вершина, найти кратчайшее расстояние от v1 до v2.
Входные данные
первая строка - n m v1 v2
далее m строк с описанием ребер.
Выходные данные - искомая длина"
Пример
Ввод
2 1 1 2
2 1 2
Вывод
2
Мое решение для задачи не проходит все тесты, помогите пожалуйста понять что не так.
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
#include <iostream>
using namespace std;
const int inf = 255555555;
int main()
{
    int n, m, v1, v2, sourse, finish, dl, min;
    bool temp;
    cin>>n>>m>>v1>>v2;
    int ** graf = new int *[n];
    for(int i = 0; i < n; i++)
        graf[i] = new int [n];
    int *d=  new int[n];
    bool *used = new bool [n];
    for(int i = 0; i < n; i++)
        used[i]= 0;
    for(int i = 0; i < n; i++)
        d[i] = inf;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            graf[i][j]= inf;
    for(int i = 0; i < m; i++)
    {
        cin>>sourse>>finish>>dl;
        graf[sourse-1][finish-1]= dl;
        graf[finish-1][sourse-1]= dl;
    }
    d[v1-1]=0;
    while(true)
    {
        temp = false;
        min = 3*inf;
        for(int i = 0; i < n; i++)
            if(d[i]<min && !used[i]) 
            {
                min = i;
                temp= true;
            }
        if(!temp) break;
        used[min] = true;
        for(int i = 0; i < n; i++)
            if(d[i]>d[min]+graf[min][i])
                d[i]= d[min]+graf[min][i];
 
        
    }
        cout<<d[v2-1];
    delete[] used;
    delete[] d;
    for(int i = 0; i < n; i++)
    delete[] graf[i];
    delete[] graf;
    return 0;
}
Добавлено через 1 час 6 минут
"Для заданных n(1<=n<=500), m(1<=m<=n*n), v1 v2(1<=v1,v2<=n), где n-число вершин неор графа, m - количество ребер, v1 стартовая вершина v2 конечная вершина, найти кратчайшее расстояние от v1 до v2.
Входные данные
первая строка - n m v1 v2
далее m строк с описанием ребер.
Выходные данные - искомая длина, если пути не существует вывести -1"
Пример
Ввод
2 1 1 2
2 1 2
Вывод
2
Мое решение для задачи не проходит все тесты, помогите пожалуйста понять что не так.

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
#include <iostream>
using namespace std;
const int inf = 255555555;
int main()
{
    int n, m, v1, v2, sourse, finish, dl, min;
    bool temp;
    cin>>n>>m>>v1>>v2;
    int ** graf = new int *[n];
    for(int i = 0; i < n; i++)
        graf[i] = new int [n];
    int *d=  new int[n];
    bool *used = new bool [n];
    for(int i = 0; i < n; i++)
        used[i]= 0;
    for(int i = 0; i < n; i++)
        d[i] = inf;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++)
            graf[i][j]= inf;
    for(int i = 0; i < m; i++)
    {
        cin>>sourse>>finish>>dl;
        graf[sourse-1][finish-1]= dl;
        graf[finish-1][sourse-1]= dl;
    }
    d[v1-1]=0;
    while(true)
    {
        temp = false;
        min = inf/2;
        for(int i = 0; i < n; i++)
            if(d[i]<min && !used[i]) 
            {
                min = i;
                temp= true;
            }
        if(!temp) break;
        used[min] = true;
        for(int i = 0; i < n; i++)
            if(d[i]>d[min]+graf[min][i])
                d[i]= d[min]+graf[min][i];
 
        
    }
        if(d[v2-1]>inf/2) cout<<"-1";
        else cout<<d[v2-1];
    delete[] used;
    delete[] d;
    for(int i = 0; i < n; i++)
    delete[] graf[i];
    delete[] graf;
    return 0;
}
проглядел, что если нет пути - нужно выводить -1, изменил, но и это не помогает
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.02.2012, 13:27
Ответы с готовыми решениями:

Алгоритм Дейкстры
Помогите найти ошибку плз. Первый шаг алгоритма выполняет правильно,а дальше-нет. #include&lt;iostream&gt; #include&lt;fstream&gt; ...

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

Алгоритм Дейкстры
Как на С++ в консольном приложении описать алгоритм Дейкстры?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.02.2012, 13:27
Помогаю со студенческими работами здесь

Алгоритм Дейкстры
Что-то у меня Дейкстра не работает... прошу помощи у вас... Сам уже часа 1.5 сижу и не могу найти ошибку...#include &lt;iostream&gt; ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru