Beispiel #1
0
        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);
        }