private void ZlepiajLitere(Graf <int> item) { List <int> P1, P2; float ŚredniaWielkość = ObliczŚredniąWIelkość(item); item.ZnajdźPołączenia(out P1, out P2); if (P1.Count > 6) { return; } int IlośćMożlwiości = 1 << P1.Count; int Stan = IlośćMożlwiości - 1; float NajwiekszePodobieństwo = int.MaxValue; List <ZdjecieZPozycją> NajlepiejDopasowane = new List <ZdjecieZPozycją>(); for (int i = 0; i < IlośćMożlwiości; i++) { UstawGraf(P1, P2, Stan, i, item); item.CzyśćZaznaczenia(); List <ZdjecieZPozycją> z = new List <ZdjecieZPozycją>(); foreach (var SpójneObszary in item.ZnajdźObszary()) { z.Add(PobierzZdjecie(SpójneObszary)); } double Podobieństwo; if (ŚredniaWielkość == 0) { Podobieństwo = z.Average(d => d.NajbliszePodobieństwo); } else { Podobieństwo = z.Average(d => d.NajbliszePodobieństwo / Matematyka.Podobność(ŚredniaWielkość, d.Obszar.Wielkośc())); } if (Podobieństwo < NajwiekszePodobieństwo) { NajwiekszePodobieństwo = (float)Podobieństwo; NajlepiejDopasowane = z; } Stan = i; } foreach (var item2 in item.Listuj()) { PaczkaGrafu pk = PaczkiDoGrafu[item2]; pk.LinikaDoKrótrejNajlerzy.ListaZZdjeciami.Remove(pk.zp); } foreach (var item2 in NajlepiejDopasowane) { Liniki[0].Add(item2); item2.IlośćSąsiadów = item.Wielkość - 1; } item.Zaznacz(); }
private void Przyporząduj(List <Linika> zwracanePrzedPrzemianą) { Liniki = zwracanePrzedPrzemianą; int NumerPorządkowy = 0; foreach (var item in zwracanePrzedPrzemianą) { foreach (var item2 in item.ListaZZdjeciami) { PaczkaGrafu pk = new PaczkaGrafu() { LinikaDoKrótrejNajlerzy = item, Pomocniczy = NumerPorządkowy++, zp = item2 }; PaczkiDoGrafu.Add(pk); Obiekty.Add(item2, pk); } } Graf.ZmieńWielkośćIntami(Obiekty.Count); }