public void PopulateOpenList() { foreach (var rule in Jug.GetTransferRules()) { JugPath jugPath; var jugClone1 = (Jug)_currentPath.J1.Clone(); var jugClone2 = (Jug)_currentPath.J2.Clone(); if (rule.Value(jugClone1, jugClone2)) { jugPath = new JugPath(jugClone1, jugClone2, _open.Count) { Anterior = _currentPath }; if (!jugPath.Paths.Any(item => item.J1.Current == jugClone1.Current && item.J2.Current == jugClone2.Current) ) { _open.Add(jugPath); } } } OrderOpenList(); }
private void ApplyRule() { var firstElement = _open.First(item => !item.Paths.Any( item2 => item2.J1.Current == item.J1.Current && item2.J2.Current == item.J2.Current) ); _open.Remove(firstElement); _currentPath = firstElement; _close.Add(_currentPath); Console.WriteLine("Abertos gerados ordenados: {0}", string.Join(",", _open.Select(item => $"({item.J1.Current}, {item.J2.Current} [{item.Order}])") ) ); Console.WriteLine("Fechados: {0}", string.Join(",", _close.Select(item => $"({item.J1.Current}, {item.J2.Current} [{item.Order}])") ) ); Console.WriteLine("======================================="); Console.WriteLine("=> Caminho: {1}, {0}", string.Join(",", _currentPath.Paths.Select(item => $"({item.J1.Current}, {item.J2.Current} [{item.Order}])") ), $"({_currentPath.J1.Current}, {_currentPath.J2.Current})" ); Console.WriteLine("======================================={0}", Environment.NewLine); }
public void CreateNewJugPath(Jug j1, Jug j2, int count) { _currentPath = new JugPath(j1, j2, count); _close.Add(_currentPath); Console.WriteLine("Fechados: {0}", string.Join(",", _close.Select(item => $"({item.J1.Current}, {item.J2.Current} [{item.Order}])") ) ); }