Exemple #1
0
        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();
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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}])")
                                          )
                              );
        }