我有一个Node
类型的列表。我想从这个列表中创建一个图表,因此我正在使用邻接列表。类型Node
的每个节点都具有与之关联的邻接列表。这是我的班级Node
public class Node
{
public int Density { get; set; }
public InterestProfile P1 { get; set; }
public List<Node> Neighbors { get; set; }
public Boolean IsMessageRecvd = false;
public Boolean IsMessageSent = false;
public Node()
{
Neighbors = new List<Node>();
}
public Node(InterestProfile a)
{
Neighbors = new List<Node>();
this.P1 = a;
}
public static int GetDensity(Node n)
{
return n.Density;
}
}
这是班级Graph
public class Graph<T>
{
List<Node> nodeSet;
public int[] Type { get; set; }
public Graph()
{
}
public Graph(List<Node> nodeSet)
{
if (nodeSet == null)
this.nodeSet = new List<Node>();
else
this.nodeSet = nodeSet;
}
public void AddNode(Node node)
{
nodeSet.Add(node);
}
public void AddEdge(Node from, Node to)
{
from.Neighbors.Add(to);
to.Neighbors.Add(from);
}
public int Count()
{
return nodeSet.Count;
}
}
在Main
中,我按如下方式创建图表:
Graph<Node> graph1 = new Graph<Node>(List1);
对于图中的每个节点,我想创建一个包含等于其密度的节点数的邻接列表。有人可以帮我弄这个吗?我是否必须在课程Graph
中进行任何更改才能实现?
我在这里看的是,让我们说List1中有一些节点。现在,List1中的每个节点都有一些与之关联的密度。假设List1 [0]的密度为6,那么在List1 [0]的邻接列表中,我想添加6个节点。但我不确定我应该在哪里实现这一点。
我可以做的第二件事是我可以在类Node本身而不是类AddNode
中定义AddEdge
和Graph
方法。所以它看起来像这样:
foreach (Node node in List1)
{
int count = 0, i = 0;
while (count <= node.Density)
{
node.AddNode(List1[i]);
Node.AddEdge(node, List1[i]);
count++;
i++;
}
}
这是对的吗?
答案 0 :(得分:0)
现在您想要输出格式化吗?你可以做这样的事情
var adjacencylist = nodeSet.Select(x => new KeyValuePair<Node, List<Node>>(x, x.Neighbours));