C ++ программа алгоритма Дейкстры с проблемой начальных вершин и получающейся на одну вершину меньше - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над C ++ представлением / реализацией алгоритма Дейкстры, и я нашел эту программу в сети, которая не работает должным образом на TurboC ++.Кто-нибудь знает решение?Я также хочу знать, почему существует минимальное значение 31999, и кодирование выполняется на мобильном эмуляторе, но отказывается работать на ПК TurboC ++

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
//using namespace std;
int shortest(int, int);
int cost[10][10], dist[20], i, j, n, k, m, S[20], v, totcost, path[20], p;
int main()
{
    int c;
    cout << "enter no of vertices";
    cin >> n;
    cout << "enter no of edges";
    cin >> m;

    cout << "\nenter\nEDGE Cost\n";
    for (k = 1; k <= m; k++)
    {
        cin >> i >> j >> c;
        cost[i][j] = c;
    }

    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            if (cost[i][j] == 0)
                cost[i][j] = 31999;

    cout << "enter initial vertex";
    cin >> v;
    cout << v << "\n";
    shortest(v, n);
}

int shortest(int v, int n)
{
    int min;
    for (i = 1; i <= n; i++)
    {
        S[i] = 0;
        dist[i] = cost[v][i];
    }
    path[++p] = v;
    S[v] = 1;
    dist[v] = 0;
    for (i = 2; i <= n - 1; i++)
    {
        k = -1;
        min = 31999;
        for (j = 1; j <= n; j++)
        {
            if (dist[j] < min && S[j] != 1)
            {
                min = dist[j];
                k = j;
            }
        }

        if (cost[v][k] <= dist[k])
            p = 1;
        path[++p] = k;

        for (j = 1; j <= p; j++)
            cout << path[j];
        cout << "\n";
        //cout <<k;
        S[k] = 1;
        for (j = 1; j <= n; j++)
            if (cost[k][j] != 31999 && dist[j] >= dist[k] + cost[k][j] && S[j] != 1)
                dist[j] = dist[k] + cost[k][j];
    }
}

1 Ответ

0 голосов
/ 09 октября 2018

Массивы основаны на 0, поэтому все циклы от 1 до <= n являются подозрительными. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...