我将编写各种图形算法,作为输入,我已经在邻接列表的形式上给出了图形。
以下是一个例子:
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,我正在寻找一种数据结构,其中图形操作既可行又有效。
答案 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"
}
]
}
}