如何在C#中表示作为邻接列表给出的图形?

时间:2015-10-30 15:31:40

标签: c# data-structures graph

我将编写各种图形算法,作为输入,我已经在邻接列表的形式上给出了图形。

以下是一个例子:

1 2 3 4

2 1 3 4

3 1 2 4

4 1 2 3 5

5 4 6

6 5

图形有6个顶点,由6行表示(每行的第一个条目表示代表该行的顶点的编号)。行中的其余条目表示与该行对应的顶点所在的顶点。

在C#中表示这个的好方法是什么?每行中不同数量的条目似乎排除了一个数组,所以我找到了这些lists of lists

我将操纵图表,例如contract edges,我正在寻找一种数据结构,其中图形操作既可行又有效。

4 个答案:

答案 0 :(得分:3)

当我有类似的任务时,我发现有以下课程很容易:

<div class="header">

答案 1 :(得分:2)

看起来像整数列表作为值结构的字典很有用:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<int, List<int>> graph = new Dictionary <int, List<int>>();
        graph[1] = new List<int> {2, 3, 4};
        graph[2] = new List<int> {1, 3, 4};
        graph[3] = new List<int> {1, 2, 4};
        graph[4] = new List<int> {1, 2, 3, 5};
        graph[5] = new List<int> {4, 6};
        graph[6] = new List<int> {5};
    }
}

答案 2 :(得分:1)

如果您要选择自定义类的编码来处理图形 this info可能会有所帮助。但所有信息都在java

答案 3 :(得分:0)

我发现表示图形的便捷方式是GraphSON格式。你可以在这里查看:GraphSON format。一个例子:

{
   "graph": {
       "mode":"NORMAL",
       "vertices": [
           {
               "_id": "1",
               "_type": "vertex"
           },
           {
               "_id": "2",
               "_type": "vertex"
           },
           {
               "_id": "3",
               "_type": "vertex"
           }
       ],
       "edges": [
           {
               "weight": 1,
               "_id": "11",
               "_type": "edge",
               "_outV": "2",
               "_inV": "1"
           },
           {
               "weight": 0.5,
               "_id": "12",
               "_type": "edge",
               "_outV": "3",
               "_inV": "2"
           }
       ]
   }
}