using System;
using System.Collections.Generic;
using System.Text;
namespace Eppstein
{
///
/// Main application class
///
class Program
{
///
/// Entry point
///
/// arguments list, not used
static void Main(string[] args)
{
Graph g = new Graph();
g.CreateVertices("S,A,B,C,D,E,F,G,H,I,J,K,T");
// Edges in Original Eppstein example (1997)
g.CreateEdges("S", "A", 2, "alpha");
g.CreateEdges("A,E", "B,I", 20, "alpha");
g.CreateEdges("B,B", "C,F", 14, "alpha");
g.CreateEdges("D", "E", 9, "alpha");
g.CreateEdges("E", "F", 10, "alpha");
g.CreateEdges("F", "G", 25, "alpha");
g.CreateEdges("H", "I", 18, "alpha");
g.CreateEdges("I", "J", 8, "alpha");
g.CreateEdges("J", "T", 11, "alpha");
g.CreateEdges("S", "D", 13, "alpha");
g.CreateEdges("A", "E", 27, "alpha");
g.CreateEdges("C,D", "G,H", 15, "alpha");
g.CreateEdges("F", "J", 12, "alpha");
g.CreateEdges("G", "T", 7, "alpha");
// Additional edges for special cases testing
g.CreateEdges("E", "J", 30, "beta"); // Diagonal edge
g.CreateEdges("F", "T", 35, "beta"); // Diagonal edge
g.CreateEdges("J", "K", 5, "beta"); // Edge not pointing to shortest path
g.CreateEdges("C", "C", 16, "beta"); // Cycling edge
// g.EdgeGroupWeights("beta", -1);
Console.WriteLine("EPPSTEIN ALGORITHM TEST");
System.Diagnostics.Stopwatch stp = new System.Diagnostics.Stopwatch();
stp.Start();
Path p = g.FindShortestPath("S", "T");
stp.Stop();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Calculation time: " + stp.ElapsedMilliseconds + " ms");
Console.ResetColor();
while (p.IsValid) // This can be replaced by something like: while (p!=null)
{
Console.WriteLine(p.VertexNames + " (" + p.Weight + ")");
p = g.FindNextShortestPath();
}
Console.WriteLine("End.");
Console.ReadKey();
}
}
}