C# 项目总成本求和的递归树算法

C# 项目总成本求和的递归树算法,c#,.net,algorithm,tree,binary-tree,C#,.net,Algorithm,Tree,Binary Tree,有没有人有办法解决这个问题,但只使用泛型树 我需要求所有节点的和,但要考虑边值 如果两个节点之间的边大于1,则整个子树的成本最多可以乘以 解决方案必须使用树算法 谢谢 假设您有一个对象节点,包含它自己的成本和一组输出边,每个边都有一个权重,您可以执行以下操作。(注意我假设您有一个DAG,正如pkacprzak所提到的,因为您发布的图片没有显示树) 类边缘 { 公共整数权重{get;set;} 公共节点开始{get;set;} 公共节点结束{get set;} } 类节点 { 私人成本; 可数边;

有没有人有办法解决这个问题,但只使用泛型树

我需要求所有节点的和,但要考虑边值

如果两个节点之间的边大于1,则整个子树的成本最多可以乘以

解决方案必须使用树算法

谢谢


假设您有一个对象
节点
,包含它自己的
成本
和一组输出
,每个边都有一个权重,您可以执行以下操作。(注意我假设您有一个DAG,正如pkacprzak所提到的,因为您发布的图片没有显示树)

类边缘
{
公共整数权重{get;set;}
公共节点开始{get;set;}
公共节点结束{get set;}
}
类节点
{
私人成本;
可数边;
// ...
公共成本()
{
整数总成本=成本;
foreach(边中的变量边)
{
totalCost+=edge.Weight*edge.End.Cost();
}
返回总成本;
}
}

您应该在DAG的源(即没有传入边的节点)上调用
Cost
。如果你有多个来源,你想实现什么取决于你。

到目前为止你得到了什么?在你发布的图片中是一个有向无环图(DAG),它不是树。
class Edge
{
    public int Weight { get; set; }
    public Node Start { get; set; }
    public Node End { get set; }
}

class Node
{
    private int cost;
    private IEnumerable<Edge> edges;

    // ...

    public int Cost()
    {
        int totalCost = cost;

        foreach (var edge in edges)
        {
            totalCost += edge.Weight * edge.End.Cost();
        }

        return totalCost;
    }
}