Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的Dijkstra算法,当未连接的顶点使用权重矩阵的值为-1时_C_Algorithm_Matrix_Dijkstra - Fatal编程技术网

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

c语言中的Dijkstra算法,当未连接的顶点使用权重矩阵的值为-1时,c,algorithm,matrix,dijkstra,C,Algorithm,Matrix,Dijkstra,当未连接的顶点使用权重矩阵的值为-1时,我试图用c实现Dijkstra算法 图- 权重矩阵- 如果我使用-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时,我试图用c实现Dijkstra算法

图- 权重矩阵-

如果我使用-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;
}

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