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); }