static void Main(string[] args) { string input_f = "input.txt"; byte[][] matr = ReadFromFile(input_f); if (matr.Length != 0) { if (EulerParse(matr)) { PointEntry first = ToPoint(matr); List <int> ways = new List <int>(); EulerWay(ways, first, matr); Console.WriteLine("END"); } else { Console.WriteLine("Введенный граф не является Эйлеровым"); } } else { Console.WriteLine("Граф не введен. Перезапустите программу, введя граф в файле или использовав ручной ввод"); } Console.ReadKey(); }
public static bool EulerWay(List <int> ways, PointEntry point, byte[][] matr) { foreach (PointEntry next in point.Near) { for (int i = 0; i < matr[0].Length; i++) { if (matr[point.Number][i] == 1 && matr[next.Number][i] == 1 && !ways.Contains(i)) { List <int> help = new List <int>(ways); help.Add(i); if (EulerWay(help, next, matr)) { Console.Write($"{point.Number + 1} => "); return(true); } } } } if (ways.Count == matr[0].Length) { Console.Write($"\n{point.Number + 1} => "); return(true); } else { return(false); } }
public int CompareTo(PointEntry ve) { if (this.Degree == ve.Degree) { return(0); } else if (this.Degree > ve.Degree) { return(1); } else { return(-1); } }
public static bool Compare(PointEntry ve1, PointEntry ve2, int depth, int max_depth) { if (max_depth == depth) { return(true); } else { bool ans = false; if (ve1.Degree == ve2.Degree) { foreach (PointEntry venear1 in ve1.Near) { bool help = false; foreach (PointEntry venear2 in ve2.Near) { help = Compare(venear1, venear2, depth + 1, max_depth) || help; } ans = ans && help; } } return(ans); } }