Я реализую График, используя c #, и я хочу проверить, вставил ли я одно и то же ребро дважды, чтобы я мог выбросить исключение при этом.
Мой класс называется Graph
Вот мое объявление _adjacencyList
protected virtual Dictionary<T, LinkedList<Node<T>>> _adjacencyList { get; set; }
Вот мой класс узла
class Node<T> where T : IComparable<T>
{
public double speed { get; set; }
public double time { get; set; }
public double distance { get; set; }
public T source { get; set; }
public T destenation { get; set; }
public Node() { }
public Node(T SOURCE, T DESTENATION, double SPEED, double DISTANCE)
{
this.source = SOURCE;
this.destenation = DESTENATION;
this.speed = SPEED;
this.distance = DISTANCE;
this.time = this.distance / this.speed;
}
}
Вот моя функция addEdge, которая принимает исходную вершину и конечную вершину, а также значения "Weight" из Edge
public void addEdge(T source, T Destenation, double speed, double Distance)
{
if (_adjacencyList.Count <= 0)
{
throw new InvalidOperationException("addEdge: There are no Vertices in Graph.\n");
}
else
{
if (_adjacencyList.ContainsKey(source) && _adjacencyList.ContainsKey(Destenation))
{
var sourceEdge = new Node<T>(source, Destenation, speed, Distance);
var destenationEdge = new Node<T>(Destenation, source, speed, Distance);
if (_adjacencyList[source].Contains(sourceEdge) || _adjacencyList[Destenation].Contains(destenationEdge))
{
throw new InvalidOperationException("addEdge: Edge already exists in Graph.\n");
}
else
{
_adjacencyList[source].AddLast(sourceEdge);
_adjacencyList[Destenation].AddLast(destenationEdge);
++_edgeCount;
}
}
else
{
throw new NullReferenceException("addEdge : Source or Destenation Vetrtex Don't Exist in Graph.\n");
}
}
}
Когда я пишу этот код в main, он не выдает исключение «Edge уже существует в Graph».
Graph<int> g = new Graph<int>();
g.addVertex(1);
g.addVertex(2);
g.addVertex(3);
g.addVertex(4);
g.addEdge(1,2,15.0,60.0);//Multiple Edge
g.addEdge(1, 2, 15.0, 60.0);//Multiple Edge
g.addEdge(1, 3, 5.0, 40.0);
g.addEdge(2,3,1.0,10.0);
g.addEdge(4,1,2.0,8.0);
Что не так с моей реализацией и как ее исправить