当未连接的顶点使用权重矩阵的值为 -1 时,Dijkstra 在 c 中的算法
Dijkstra's algorithm in c when vertex that are not connected has the value of -1 using Matrix of weights
当未连接的顶点使用权重矩阵的值为 -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;
}
您可以只检查一条边的权重是否为 -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 位整数类型存储距离以防止溢出。
当未连接的顶点使用权重矩阵的值为 -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;
}
您可以只检查一条边的权重是否为 -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 位整数类型存储距离以防止溢出。