根据密度填充节点的邻接列表

时间:2014-07-30 19:26:11

标签: c# graph

我有一个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中定义AddEdgeGraph方法。所以它看起来像这样:

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++;
            }
        }

这是对的吗?

1 个答案:

答案 0 :(得分:0)

现在您想要输出格式化吗?你可以做这样的事情

var adjacencylist = nodeSet.Select(x => new KeyValuePair<Node, List<Node>>(x, x.Neighbours));