Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 根据两个对象之间的关系获取两个对象之间的最短路径_C#_Sql_Sorting - Fatal编程技术网

C# 根据两个对象之间的关系获取两个对象之间的最短路径

C# 根据两个对象之间的关系获取两个对象之间的最短路径,c#,sql,sorting,C#,Sql,Sorting,我正试图用SQL或C#找出解决这个问题的最佳方法。 假设我有一个大约50个对象的列表,每个对象都与另外两个对象相关 Object 1. ID: 1 Name: Aspect1 Relation1: Aspect5 Relation2: Aspect7 Object 2. ID: 2 Name: Aspect2 Relation1: Aspect23 Relation2: Aspect50 Object 3 ID: 13 Name: Aspect13 R

我正试图用SQL或C#找出解决这个问题的最佳方法。 假设我有一个大约50个对象的列表,每个对象都与另外两个对象相关

Object 1.
ID: 1
Name:      Aspect1
Relation1: Aspect5
Relation2: Aspect7

Object 2.
ID:    2
Name:      Aspect2
Relation1: Aspect23
Relation2: Aspect50

Object 3
ID:   13
Name:      Aspect13
Relation1: Aspect5
Relation2: Aspect23
基本上,我需要查看所有50个对象,然后找到连接aspect1和aspect2的最短路径,方法是通过其他方面将它们连接起来,它们之间至少有3个连接

最终的结果看起来像

aspect1 -- aspect5 -- aspect13 -- aspect23 -- aspect2

SQL没有针对此类问题进行优化。但是,您可以连续运行查询以尝试长度为4、5等的路径:

with relations as (
      select objectid as from_o, relation1 as to_o
      from objects
      union all
      select objectid, relation2
      from objects
     )
select *
from relations r1 join
     relations r2
     on r1.to_o = r2.from_o join
     relations r3
     on r2.to_o = r3.from_o join
     relations r4
     on r3.to_o = r4.from_o
where r1.objectid = 'Aspect1' and
      r4.objectid = 'Aspect2';
由于每个对象只有两个关系和50个对象,对于短路径而言,这应该是一个可解决的问题。如果这个查询没有返回任何内容,您将继续以类似的方式添加联接。如果您的数据库不支持带有的
,则可以使用子查询或视图来实现相同的效果


有一种方法使用递归CTE来解决这个问题。但是,您没有指定数据库,也不是所有的数据库都支持它们。

@GordonLinoff,为什么这么难?@GordonLinoff,是的,但是对于这里提供的部分问题,您已经在您的博文中回答了(顶点数不多,连接数固定),另一方面是。@HamletHakobyan。我在考虑访问所有顶点的最短路径,而不是连接其中两个顶点。@GordonLinoff,你是什么意思?@HamletHakobyan听起来他把它看作是旅行推销员的问题,而不是最短路径问题。@beefwipe。如果要确保较短的路径不会干扰,请在
where
子句中添加
r2.objectid'Aspect2'和r3.objectid'Aspect3'