public Dictionary <Vertex, int> BfsShortestPathForDAC(Graph graph, Vertex startVertex) { Dictionary <Vertex, int> distance = new Dictionary <Vertex, int>(); GeneralSamples generalSamples = new GeneralSamples(); Queue <Vertex> deque = generalSamples.TopologicalSort(graph); distance[startVertex] = 0; while (deque.Count > 0) { Vertex vertex = deque.Dequeue(); foreach (Edge edge in vertex.Edges) { int v1Distance = distance.ContainsKey(edge.Vertex1) ? distance[vertex] : 1000; int v2Distance = distance.ContainsKey(edge.Vertex2) ? distance[vertex] : 1000; if (v2Distance > v1Distance + edge.Weight) { distance[edge.Vertex2] = v1Distance + edge.Weight; } } } return(distance); }
public static void KnightTourTest() { GeneralSamples knightTour = new GeneralSamples(); Console.WriteLine("the solution is"); //knightTour.solveKnightTour(); }
private static void GeneralSamplesTest() { GeneralSamples generalSamples = new GeneralSamples(); //genSamples.NumberOfIslandsTest(); //genSamples.TopologicalSortTest(); //genSamples.TarganStronglyConnectedComponentsTest(); //genSamples.FindLaddersTest(); //genSamples.GetAllBridgesTest(); }
// Main function to find all cycles public List <List <Vertex> > SimpleCyles(Graph graph) { blockedSet = new HashSet <Vertex>(); blockedMap = new Dictionary <Vertex, HashSet <Vertex> >(); stack = new Stack <Vertex>(); allCycles = new List <List <Vertex> >(); long startIndex = 1; GeneralSamples tarjan = new GeneralSamples(); while (startIndex <= graph.Verticies.Count) { Graph subGraph = CreateSubGraph(startIndex, graph); List <HashSet <Vertex> > sccs = tarjan.TarganStronglyConnectedComponents(subGraph); // This creates graph consisting of strongly connected components only and then returns the // least indexed vertex among all the strongly connected component graph. // It also ignore one vertex graph since it wont have any cycle. //Optional<Vertex> maybeLeastVertex = LeastIndexSCC(sccs, subGraph); //if (maybeLeastVertex.isPresent()) Vertex leastVertex = LeastIndexSCC(sccs, subGraph); if (leastVertex != null) { blockedSet.Clear(); blockedMap.Clear(); FindCyclesInSCG(leastVertex, leastVertex); startIndex = leastVertex.Id + 1; } else { break; } } return(allCycles); }