Pull to refresh

Comments 8

Да я и не говорил, что это сложная задача. Надеюсь сложные будут опубликованы далее…
Либо я не понял тонкостей вашей задачи, либо:

class Program
{
static void Main()
{
const int n = 4;
var listOfLists = new List<List>();
for (var i = 0; i < n; i++)
{
listOfLists.Add(new List());
}

var range = Enumerable.Range(0, n).ToList();
for (var i = 0; i < n; i++)
{
for (var j = 0; j < n; j++)
{
listOfLists[j].Add(range.Shuffle().Except(listOfLists[j]).First());
}
}

for (var i = 0; i < n; i++)
{
for (var j = 0; j < n; j++)
{
Console.Write(listOfLists[i][j] + " ");
}
Console.WriteLine();
}
Console.ReadLine();
}
}

public static class Extensions
{
public static List Shuffle(this IList collection)
{
var rng = new Random();

var n = collection.Count;
while (n-- > 1)
{
var k = rng.Next(n);
var value = collection[k];
collection[k] = collection[n];
collection[n] = value;
}

return collection.ToList();
}
}
Спасибо! Я пробовал через коллекцию коллекций, но не вышло, может, из-за моих не программерских рук. Но я помню что для 1 ряда было замечательно, а далее появлялись затыки. Попробую Ваш код, может будет быстрее находить.
условий на самом деле больше:
1. в одном туре не должно быть, скажем, 5 матчей в москве
2. для всех команд должно по максимуму сохраняться чередование домашних и выездных матчей
Вот! Как раз развитие данной темы мной и запланировано. Но критерии формирования календаря будут еще шире и специфичнее.
пишите дальше.
по работе мне такого не надо, но как программисту и футбольному болельщику тема очень интересна
p.s. к тому же, c# у меня сейчас в стадии изучения :)
Sign up to leave a comment.

Articles