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

时间:2015-01-07 09:24:47

标签: c algorithm matrix dijkstra

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

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

我的代码工作,如果我使用" -1" value作为一些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;
}

1 个答案:

答案 0 :(得分:0)

您可以检查边缘是否没有-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位整数类型存储距离以防止溢出。