Exemple #1
0
        private static int CalculateMaxHappiness(List <Relation> relations)
        {
            var personNames = relations.Select(r => r.Name).Distinct().ToList();

            var persons = personNames.Select(name =>
            {
                var personRelations = relations.Where(r => r.Name == name);
                var happiness       = personRelations.ToDictionary(x => personNames.IndexOf(x.Neighbor), x => x.Happiness);
                return(happiness);
            })
                          .ToList();
            var N = persons.Count();

            var maxHappiness = 0;

            foreach (var perm in MathHelper.AllPermutations(N))
            {
                var happiness = 0;
                var order     = perm.ToArray();
                for (var i = 0; i < N; i++)
                {
                    var i1 = order[i];
                    var i2 = order[(i + 1 + N) % N];
                    var p1 = persons[i1];
                    var p2 = persons[i2];
                    happiness += p1[i2] + p2[i1];
                }
                if (happiness > maxHappiness)
                {
                    maxHappiness = happiness;
                }
            }

            return(maxHappiness);
        }