を使用して隣接リストを実装できますDictionary
。辞書の各キーは、エッジの開始ノードを表します。各値はList
オブジェクトの値であり、それぞれがエッジの宛先ノードを定義します。
たとえば、各キーList
にのを格納できます。Tuples
の最初の項目はTuple
、宛先ノードを表します。他の項目は、エッジのプロパティを定義します。
class AdjacencyList
{
Dictionary<int, List<Tuple<int, int>>> adjacencyList;
// Constructor - creates an empty Adjacency List
public AdjacencyList(int vertices)
{
adjacencyList = new Dictionary<int, List<Tuple<int, int>>>();
}
// Appends a new Edge to the linked list
public void addEdge(int startVertex, int endVertex, int weight)
{
if (!adjacencyList.ContainsKey(startVertex)) {
adjacencyList[startVertex] = new List<Tuple<int, int>>();
}
adjacencyList[startVertex].Add(new Tuple<int, int>(endVertex, weight));
}
// Removes the first occurence of an edge and returns true
// if there was any change in the collection, else false
public bool removeEdge(int startVertex, int endVertex, int weight)
{
Tuple<int, int> edge = new Tuple<int, int>(endVertex, weight);
return adjacencyList[startVertex].Remove(edge);
}
}