...

/

Solution: Remove an Edge

Solution: Remove an Edge

Learn how to delete an edge from a directed graph.

Solution: Using graph traversal

class Program
{
/// <summary>
/// A methos to remove an edge from the graph.
/// </summary>
/// <param name="graph">A graph.</param>
/// <param name="source">Source vertex.</param>
/// <param name="destination">Destination vertex.</param>
public static void RemoveEdge(Graph graph, int source, int destination)
{
if (graph.V == 0)
{
return;
}
if (source >= graph.V || source < 0)
{
return;
}
if (destination >= graph.V || destination < 0)
{
return;
}
AdjNode temp = graph.graph[source];
// If head node itself holds the key to be deleted
if (temp != null)
{
if (temp.Vertex == destination)
{
graph.graph[source] = temp.Next;
return;
}
}
AdjNode prev = null;
while (temp != null)
{
if (temp.Vertex == destination)
{
break;
}
prev = temp;
temp = temp.Next;
}
if (temp == null)
{
return;
}
// Set the new link
// from removed node's previous node to next node
prev.Next = temp.Next;
}
// Main program to test above method
static void Main(string[] args)
{
Graph g = new Graph(5);
g.AddEdge(0, 1);
g.AddEdge(0, 2);
g.AddEdge(1, 3);
g.AddEdge(1, 4);
g.AddEdge(2, 4);
Console.WriteLine("Before: ");
g.PrintGraph();
RemoveEdge(g, 1, 3);
Console.WriteLine("After: ");
g.PrintGraph();
}
}

Explanation

This challenge is very similar to the deletion in the linked list.

Our vertices are stored in a linked list. First, we access the source linked list. If the head node of the source linked list holds the key to be deleted, we shift the head one step forward ...