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