bool Check(int a) { Chest ch = chests[a]; Chest start = chests[0]; if (start.GetKeyOfType(ch.KeyOpen) < 1) { return(false); } //connectivity Chest newStart = new Chest(); newStart.KeyHas = new Dictionary <int, int>(start.KeyHas); newStart.KeyHas[ch.KeyOpen]--; foreach (var pair in ch.KeyHas) { newStart.AddKey(pair.Key, pair.Value); } chests[0] = newStart; chests[a] = null; bool res = BFS(N - tot - 1); chests[a] = ch; chests[0] = start; return(res); }