private List <Polje> PoljaUNastavku(Polje polje, JesuLiUNizu jeLiUNizu)
        {
            List <Polje> polja = new List <Polje>();

            while ((polje = mreža.RaspoloživaPolja.FirstOrDefault(p => jeLiUNizu(p, polje))) != null)
            {
                polja.Add(polje);
            }
            return(polja);
        }
        private List <Polje> PoljaUNizu(Polje polje, int najvišePolja, JesuLiUNizu jeLiUNizu)
        {
            List <Polje> polja = new List <Polje> {
                polje
            };

            while (--najvišePolja > 0)
            {
                polje = mreža.RaspoloživaPolja.FirstOrDefault(p => jeLiUNizu(p, polje));
                if (polje == null)
                {
                    break;
                }
                polja.Add(polje);
            }
            return(polja);
        }
        private NizoviPolja DajNizove(int duljina, JesuLiUNizu jeLiUNizu, DovoljanOdmak dovoljnoOdmaknuto)
        {
            int        najdesnijiStupac = mreža.RaspoloživaPolja.Max(p => p.Stupac);
            int        najdonjiRedak    = mreža.RaspoloživaPolja.Max(p => p.Redak);
            Polje      granica          = new Polje(najdesnijiStupac - duljina + 1, najdonjiRedak - duljina + 1);
            ListePolja liste            = new ListePolja();

            foreach (Polje početno in mreža.RaspoloživaPolja)
            {
                // dodatni uvjet kojim izbjegavamo jalova pretraživanja:
                if (dovoljnoOdmaknuto(početno, granica))
                {
                    List <Polje> poljaUNizu = PoljaUNizu(početno, duljina, jeLiUNizu);
                    if (poljaUNizu.Count() == duljina)
                    {
                        liste.Add(poljaUNizu);
                    }
                }
            }
            return(liste);
        }