Exemple #1
0
        // Igaz, ha az allomanyban talal olyan elemet, ami korabban mar szerepelt, mert ekkor egy osszefuggo halmazrol beszelhetunk
        // Hamis, ha nem talal olyan elemet, amelyik korabban szerepelt, mert ekkor egy uj, diszjunkt halmazrol beszelunk
        private Boolean allomanyKonzisztensAdottPontbol(string[] tartomany, string szin, int iTol, int jTol, Boolean elso)
        {
            int[,] elozoHelyek;
            Boolean kiertem = false;

            if (szin.Equals("fekete"))
            {
                elozoHelyek = BufferKezeles.initBuffer(leghosszabbFeketeUt);
            }
            else
            {
                elozoHelyek = BufferKezeles.initBuffer((dimenziok[0] - 2) * (dimenziok[1] - 2));
            }

            kiertem = korbejaras(tartomany, szin, iTol, jTol, ref elozoHelyek);

            BufferKezeles.normalizal(ref elozoHelyek);

            // Elozoleg meglatogatott helyek hozzaadasa a kijelolt halmazhoz
            for (int i = 0; i < elozoHelyek.Length / 2; i++)
            {
                int[] lepes;
                if (elozoHelyek[i, 0] != -1 && elozoHelyek[i, 1] != -1)
                {
                    lepes = new int[2] {
                        elozoHelyek[i, 0], elozoHelyek[i, 1]
                    }
                }
                ;
                else
                {
                    continue;
                }

                if (szin.Equals("fekete"))
                {
                    if (elso || BufferKezeles.tartalmazza(voltMarFekete, lepes))
                    {
                        BufferKezeles.egyediElemekTombjeHozzaadas(ref voltMarFekete, elozoHelyek);
                        return(true);
                    }
                }
                else
                {
                    foreach (int[,] elem in voltMarFeher)
                    {
                        if (elso || BufferKezeles.tartalmazza(elem, lepes))
                        {
                            int index = voltMarFeher.IndexOf(elem);
                            int[,] halmaz = elem;
                            BufferKezeles.egyediElemekTombjeHozzaadas(ref halmaz, elozoHelyek);
                            if (kiertem)
                            {
                                halmaz[0, 0] = -2;
                                halmaz[0, 1] = -2;
                            }
                            voltMarFeher[index] = halmaz;
                            return(true);
                        }
                    }
                    int[,] ujHalmaz = BufferKezeles.initBuffer(elozoHelyek.Length / 2);
                    BufferKezeles.egyediElemekTombjeHozzaadas(ref ujHalmaz, elozoHelyek);
                    if (kiertem)
                    {
                        ujHalmaz[0, 0] = -2;
                        ujHalmaz[0, 1] = -2;
                    }
                    int[,] element;
                    try {
                        element = voltMarFeher.Last();
                        voltMarFeher.Insert(voltMarFeher.IndexOf(element) + 1, ujHalmaz);
                    }
                    catch (InvalidOperationException e)
                    {
                        voltMarFeher.Insert(0, ujHalmaz);
                    }

                    if (!kiertem)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }