【问题标题】:Dijkstra's algorithm in c when vertex that are not connected has the value of -1 using Matrix of weights当未连接的顶点使用权重矩阵的值为 -1 时,C 中的 Dijkstra 算法
【发布时间】:2015-01-07 09:24:47
【问题描述】:

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

图表-http://imgur.com/TqCCcrk,BBrGSSl#0 权重矩阵 - http://imgur.com/TqCCcrk,BBrGSSl#1

如果我使用“-1”值作为某个 int 值(大于所有边的权重),我的代码可以工作,但我需要支持所有 int 值(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;
}

【问题讨论】:

    标签: c algorithm matrix dijkstra


    【解决方案1】:

    您可以只检查一条边的权重是否为 -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 位整数类型以防止溢出。

    【讨论】:

      猜你喜欢
      • 2013-01-20
      • 2018-05-23
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      相关资源
      最近更新 更多