Ejemplo n.º 1
0
        public bool IsWon()
        {
            if (_lastMoveResult == MoveResult.Illegal)
            {
                return(false);
            }

            var winSize = _movesPlayed % 2 == 1 ? _a : _b;
            var edge    = LookupEdge(_n, _lastMoveEdge);
            var n1      = GetNeighborsOfColor(edge.Item1, _lastMoveColor);
            var n2      = GetNeighborsOfColor(edge.Item2, _lastMoveColor);
            var common  = ListUtility <int> .Intersection(n1, n2);

            return(IsCliqueOfSize(common, winSize - 2, _lastMoveColor));
        }
Ejemplo n.º 2
0
        bool IsCliqueOfSize(List <int> vertices, int size, int color)
        {
            if (vertices.Count < size)
            {
                return(false);
            }
            if (size <= 1)
            {
                return(true);
            }

            for (int i = 0; i < vertices.Count; i++)
            {
                var neighbors = ListUtility <int> .Intersection(vertices.Skip(i + 1), GetNeighborsOfColor(vertices[i], color));

                if (IsCliqueOfSize(neighbors, size - 1, color))
                {
                    return(true);
                }
            }

            return(false);
        }