Algorithm 图路径中的未访问邻居

Algorithm 图路径中的未访问邻居,algorithm,data-structures,graph,Algorithm,Data Structures,Graph,我试图在无向图中找到距离,但当导航到不同的路径时,无法正确计算计数 我不确定什么是最好的方法: 1) 计算路径值,排除不必要的路径 2) 要保留路径(我认为使用LinkedList或ArrayList等)。对于这种情况,什么是最佳选择 任何帮助都将不胜感激。以下是解决此问题的代码: void Measure(Node node) { path.Add(node); node.IsVisited = true; if (node != destination) {

我试图在无向图中找到距离,但当导航到不同的路径时,无法正确计算计数

我不确定什么是最好的方法:

1) 计算路径值,排除不必要的路径

2) 要保留路径(我认为使用LinkedList或ArrayList等)。对于这种情况,什么是最佳选择


任何帮助都将不胜感激。

以下是解决此问题的代码:

void Measure(Node node)
{
    path.Add(node);
    node.IsVisited = true;

    if (node != destination)
    {
        foreach (var neighbor in node.Neighbors.Where(n=>!n.IsVisited))
        {
            Measure(neighbor);
        }
        path.RemoveAt(path.Count - 1);
    }
}
您可以使用任何动态长度结构(如List或LinkedList)来存储路径。为简单起见,建议使用List

用法:

var path = new List<Node>()
Measure(firstNode);
Print(path.Count);
var path=new List()
测量(第一节点);
打印(路径计数);
如果两个节点之间存在路径,则此操作有效。否则,路径为空

class Node
{
     public string Name { get; set; }
     public bool IsVisited { get; set; }
     public List<Node> Neighbors { get; set; } = new List<Node>();
}
类节点
{
公共字符串名称{get;set;}
公共布尔值为{get;set;}
公共列表邻居{get;set;}=new List();
}

当你说计数器计数不正确时,你是什么意思?它是否保持不变,而不是增加或在你不想增加时增加?实际上,我需要关于问题中2点的建议。然后我将尝试解决问题。谢谢。1)您可以在退出节点时减少递归方法末尾的计数器。2) 没关系,只要用一个List@Bizhan非常感谢你的回复。关于1,我可以正确地导航到所有节点,但我不知道如何构建逻辑来检测未连接的节点,即3和4。它们没有权重值,我可以捕捉到,但不知道在递归调用中减少3和4。有什么例子吗?@Bizhan有什么帮助吗?谢谢你的回复,我不画图形,因此我应该使用键值对而不是节点吗?或者在节点类内部?另一方面,是的,我在两个节点之间测量。但我不知道节点不是目的地部分,因为这一点让我感到困惑。请举个例子好吗?我不明白这些有什么关系。我编写了一个psudocode,因为您没有共享任何代码,所以我假设您可以将其转换为自己的结构。使用您认为适合节点的任何类型。(我将编写一个新类,包含名称、邻居和属性)。节点不是目标,可以是
节点!=目标
node.name!=destination.name
。目的地是目的地节点(6)非常感谢。您还可以添加类定义吗?我不确定某些属性的类型。@Jason我添加了类定义