Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何表示C#中作为邻接列表给出的图形?_C#_Data Structures_Graph - Fatal编程技术网

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

如何表示C#中作为邻接列表给出的图形?,c#,data-structures,graph,C#,Data Structures,Graph,我将编写各种图形算法,作为输入,我给出了邻接列表形式的图形 下面是一个例子: 1234 2 1 3 4 3 1 2 4 41235 5 4 6 6.5 该图有6个顶点,由6行表示(每行的第一个条目表示代表该行的顶点数)。行中的其余条目表示与该行对应的顶点相邻的顶点 用C#表示这一点的好方法是什么?每行中不同的条目数似乎排除了数组的可能性,所以我找到了这些 例如,我将操作图形,我正在寻找一种数据结构,在这种结构中,图形操作既可能又有效。如果您选择自定义类的编码来处理图形 可能会有帮助。但是java

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

下面是一个例子:

1234

2 1 3 4

3 1 2 4

41235

5 4 6

6.5

该图有6个顶点,由6行表示(每行的第一个条目表示代表该行的顶点数)。行中的其余条目表示与该行对应的顶点相邻的顶点

用C#表示这一点的好方法是什么?每行中不同的条目数似乎排除了数组的可能性,所以我找到了这些


例如,我将操作图形,我正在寻找一种数据结构,在这种结构中,图形操作既可能又有效。

如果您选择自定义类的编码来处理图形
可能会有帮助。但是
java

上的所有信息当我有一个类似的任务时,我发现拥有以下类很容易:

    class Edge
    {
    public Node From;
    public Node To;
    }

    class Node
    {
         public List<Edge> EdgesIn;
         public List<Edge> EdgesOut;
    }

    class Graph
    {
         public List<Node> Nodes;
    }
类边缘
{
来自的公共节点;
公共节点到;
}
类节点
{
公共列表边缘蛋白;
公开名单边缘;
}
类图
{
公共列表节点;
}

看起来像是一个字典,其中包含一列整数作为值结构,可能有用:

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};
    }
}
使用系统;
使用System.Collections.Generic;
班级计划
{
静态void Main()
{
字典图=新字典();
图[1]=新列表{2,3,4};
图[2]=新列表{1,3,4};
图[3]=新列表{1,2,4};
图[4]=新列表{1,2,3,5};
图[5]=新列表{4,6};
图[6]=新列表{5};
}
}

我发现一种表示图形的方便方法是GraphSON格式。您可以在这里查看:。例如:

{
   "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"
           }
       ]
   }
}

非常感谢。这是否意味着为图形中的每个节点和边创建一个对象节点和对象边?我想知道如果我有一个很大的图,比如Facebook图,用户是节点,边是朋友,那么跟踪这么多对象会很难吗?