具有初始顶点问题并减少了一个顶点的C ++ Dijkstra算法程序

时间:2018-10-09 08:17:20

标签: c++ dijkstra

我正在研究Dijkstra算法的C ++表示/实现,但是我发现此程序在线无法在TurboC ++上正确执行。 有人知道解决方案吗?我也想知道为什么最小值为31999,并且编码在移动仿真器上运行,但是拒绝在PC 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 :(得分:2)

数组基于0,因此从1到<= n的所有循环都是可疑的。