检查给定的距离矩阵是否表示有效的加权有向图

时间:2019-04-27 12:14:58

标签: graph

给出距离矩阵D,其中d [i] [j]表示从i到j的最短路径,并且所有边缘权重均为正。 还有,

d[i][i] = 0  and
d[i][j] > 0

距离矩阵可以表示有效加权有向图,也可以不表示。 如何检查它是否代表有效的加权有向图?

2 个答案:

答案 0 :(得分:0)

以下条件是必要条件,但还不足够:

  • 对角线应该为零(d [i] [j] == 0,其中i == j)
  • 对于所有a,b,
  • 从a到b的距离和b到a的距离必须相同(d [i] [j] == d [j] [i]其中 i!= j)

有效距离矩阵应满足以下条件:

  • 如果从a到b的距离为d [a] [b],并且该距离 从b到c是d [b] [c],则d [a] [c] <= d [a] [b] + d [b] [c],因为d [i] [j]表示i之间的最小距离和j节点。

Sudo代码:

bool valid = true;
for(int k=0;k<n;k++)
{
     for(int i=0;i<n;k++)
     {
         for(int j=0;j<n;j++)
         {
             if(j<=i) //check for only upper half of diagonal
                 continue;
             if(d[i][k]+d[k][j]<d[i][j])
             {
                 valid = false;
                 break;
             }
         }
         if(!valid)
             break;
     }
     if(!valid)
         break;
}
return valid;

答案 1 :(得分:0)

检查

   d[i][j]==0 for i=j and 

   d[i][j]==d[j][i] for all i and j

现在,在给定的最短路径上运行dijsktra的最短路径算法。这将给出一个新的最短路径矩阵,即A。

   Now check if d[i][j]=A[i][j] for all i and j.

如果这些条件中的任何一个失败,则图形无效,否则有效