public IEnumerable <Polje> DajKandidate() { ListePolja nizoviPolja = new ListePolja(); var smjerovi = DajSmjerove(); var nizPolja = tražilica.DajPoljaUNastavku(pogođenaPolja.First(), smjerovi.First()); if (nizPolja.Count() >= 0) { nizoviPolja.Add(nizPolja); } nizPolja = tražilica.DajPoljaUNastavku(pogođenaPolja.Last(), smjerovi.Last()); if (nizPolja.Count() >= 0) { nizoviPolja.Add(nizPolja); } // traži najdulji niz int najdulji = nizoviPolja.Max(niz => niz.Count()); // odabire samo nizove koji su duljine veće od duljine broda - 1 // ili su najveće duljine int granica = Math.Min(najdulji, duljinaBroda - pogođenaPolja.Count); var probraniNizovi = nizoviPolja.Where(niz => niz.Count() >= granica); // vraća prve članove nizova, tj. polja uz prvo pogođeno return(probraniNizovi.Select(niz => niz.First())); }
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); }