gpt4 book ai didi

c# - 类似于 C# 中的图形实现

转载 作者:行者123 更新时间:2023-12-04 02:30:09 25 4
gpt4 key购买 nike

所以我有一个对象(我们称它为 Head),它有一个对象列表 C(C1,C2,C3,...) , T(T1,T2,...) 和 M(M1,M2 ,...),所有这些都是相互关联的,例如

Head -> C1,C2,C3 , T1 , T2 , M1 , M2
T1 -> C1,C2
T2 -> C2,C3
M1 -> C1, C2,C3
M2 -> C1, C2

其中“->”表示“与”相​​关

So Head has 7 successors and 0 predecessors
T1 has 1 predecessor(Head ) and 2 successors(C1,C2)
M1 has 1 predecessor(Head ) and 3 successors(C1,C2,C3)
and so on

我想创建一个以后继者和前任者作为其属性的类,但不确定如何从 Head 对象构建这种类似图的结构?

最佳答案

这实际上取决于您需要对图表做什么。最简单的存储是 List<Node>其中每个 Node 对象都包含指向其前任和后继者的链接。 (当然还有一些数据)

您几乎可以执行此列表中的所有操作,但算法可能具有特定的数据结构,使其更高效/更快。根据需要转换为此。例如初始化:

class Example
{
public List<Node> InitGraph()
{
var nodes = new Dictionary<string, Node>();

nodes.Add("Head", new Node("Head"));
nodes.Add("T1", new Node("T1"));
nodes.Add("T2", new Node("T2"));
// While that works, a method is nicer:
nodes.Add("C1");

// These two lines should really be factored out to a single method call
nodes["Head"].Successors.Add(nodes["T1"]);
nodes["T1"].Predecessors.Add(nodes["Head"]);
nodes["Head"].Successors.Add(nodes["T2"]);
nodes["T2"].Predecessors.Add(nodes["Head"]);

// Yes. Much nicer
nodes.Connect("Head", "C1");
nodes.Connect("T1", "C1");
nodes.Connect("T2", "C1");

var nodelist = new List<Node>(nodes.Values);
return nodelist;
}
}
public static class NodeHelper
{
public static void Add(this Dictionary<string, Node> dict, string nodename)
{
dict.Add(nodename, new Node(nodename));
}
public static void Connect(this Dictionary<string, Node> dict, string from, string to)
{
dict[ from ].Successors.Add(dict[ to ]);
dict[ to ].Predecessors.Add(dict[ from ]);
}
}

public class Node
{
public string Name { get; set; }
public int Coolness { get; set; }
public List<Node> Predecessors { get; set; }
public List<Node> Successors { get; set; }
public Node()
{
Coolness = 1;
}

public Node(string name) : this()
{
this.Name = name;
}
}

对于实际的初始化阶段,我会从文件中读取它。首先是所有节点,然后是连接它们的所有边。制作一些不错的加载/保存方法以确保它们都是一致的。


虽然我扩展了示例(并且它可以编译),但我将测试留给了读者。它应该为您提供一个良好的起点。

关于c# - 类似于 C# 中的图形实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21685552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com