using GraphCustomSearcher.Data;
using GraphCustomSearcher;
///
/// Ищет в направленном графе путь от точки до точки
/// учитывает наличие круговых двухсторонних связей
///
public class Program
{
public static void Main()
{
var GraphX = new Graph();
var namesVerticles = new string[] { "Пенсильвания", "Париж", "Магеллан", "Аляска", "Аляска", "Оптимум"};
var wayEdges = new int[,] { { 0, 1 }, { 1, 0 }, { 1, 2 }, { 2, 1 }, { 2, 5 }, { 3, 1 }, { 3, 4 }, { 4, 3 } };
GraphX.AddVerticle(AddVerticles(namesVerticles));
GraphX.AddEdge(AddEdges(wayEdges, AddVerticles(namesVerticles)));
Console.WriteLine("Пенсильвания->Париж");
StartSeachPath(GraphX, "Пенсильвания", "Париж");
Console.WriteLine("Пенсильвания->Оптимум");
StartSeachPath(GraphX, "Пенсильвания", "Оптимум");
}
///
/// Ищет путь от узла до узла
///
/// Граф
/// Точка старта
/// Точка прибытия
public static void StartSeachPath(Graph graph, string start, string stop)
{
Console.WriteLine();
graph.RebuildEdge();
graph.SearchPath(start, stop);
if (stop.Contains(graph.Target.Name))
Console.WriteLine($"--> PATH: {graph.Path}");
else Console.WriteLine("--> ERROR: Путь невозможен");
Console.WriteLine();
}
///
/// Добавить узлы
///
/// список имён узлов
///
public static List AddVerticles(string[] namesVerticles)
{
var VerticleList = new List();
foreach (var verticle in namesVerticles)
VerticleList.Add(new Verticle(verticle));
return VerticleList;
}
///
/// Добавить рёбра (возможные пути между узлами)
///
///
public static List AddEdges(int[,] wayEdges, List VerticleList)
{
var EdgeList = new List();
for(int ind = 0; ind < wayEdges.GetLength(0); ind++)
EdgeList.Add(new Edge(VerticleList[wayEdges[ind,0]], VerticleList[wayEdges[ind, 1]]));
return EdgeList;
}
}