当顶点未连接时,c 中的 Dijkstra 算法的值为 -1,使用权重矩阵



im 尝试在 c 中实现 Dijkstra 算法,当未连接的顶点使用权重矩阵的值为 -1 时。

图形 - https://i.stack.imgur.com/UjOwM.png重量矩阵 - https://i.stack.imgur.com/DYu3z.png

如果我使用"-1"值作为某个整数值(大于所有边缘权重),我的代码可以工作,但我需要支持所有整数值(0 和正数)

我如何更改以下代码以支持 -1 作为无穷大值并且代码将起作用!

p.s -1 值是例如 3 到 4 之间的连接大小为 6 的权重矩阵,从索引 1 而不是 0 开始

多谢。。。

while(selected[target] ==0)
{
    min = INT_MAX;
    m = 0;
    for(i=1;i< size;i++)
    {
        d = dist[start] +cost[start][i];
        if(d< dist[i]&&selected[i]==0)
        {
            dist[i] = d;
            prev[i] = start;
        }
        if(min>dist[i] && selected[i]==0)
        {
            min = dist[i];
            m = i;
        }
    }
    start = m;
    selected[start] = 1;
}
start = target;
j = 0;
while(start != -1)
{
    path[j++] = start;
    start = prev[start];
}

return pathList;
}

您可以检查边是否没有 -1 权重:

for (i = 1; i < size; i++) {
    if (cost[start][i] != -1) {
        d = dist[start] + cost[start][i];
        if (d < dist[i] && selected[i] == 0) {
            dist[i] = d;
            prev[i] = start;
        }
    }
    if (min > dist[i] && selected[i] == 0) {
        min = dist[i];
        m = i;
    }
}

顺便说一下,如果您需要支持高达 INT_MAX 的边权重,则应以 64 位整数类型存储距离以防止溢出。

相关内容

最新更新