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