より具体的にする必要がある場合は、コードをカスタマイズする必要があります。
クラスチーム:
class Team
{
string name = "";
List<Team> playedAgainst = new List<Team>();
public string Name
{
get { return name; }
set { name = value; }
}
public Team(string name)
{
this.name = name;
}
public void AddOpponent(Team opponent)
{
this.playedAgainst.Add(opponent);
}
public bool hasPlayedAgainst(Team opponent)
{
return playedAgainst.Contains(opponent);
}
public void Reset()
{
playedAgainst.Clear();
}
public override bool Equals(object obj)
{
if(!(obj is Team))
return base.Equals(obj);
Team t = (Team)obj;
return t.name == name;
}
public override string ToString()
{
return name;
}
}
クラス チームマッチアップ:
class TeamMatchup
{
List<Team> involvedTeams = new List<Team>();
List<List<Team[]>> rounds = new List<List<Team[]>>();
public void AddTeam(Team team)
{
involvedTeams.Add(team);
}
public void GenerateBattleRounds()
{
rounds = new List<List<Team[]>>();
while(true)
{
List<Team[]> round = new List<Team[]>();
foreach (Team team in involvedTeams)
{
if (!round.TrueForAll(battle => !battle.Contains(team)))
continue;
Team team2 = involvedTeams.FirstOrDefault(t => t != team && !t.hasPlayedAgainst(team) && round.TrueForAll(battle => !battle.Contains(t)));
if (team2 == null) //even count of teams
continue;
team.AddOpponent(team2);
team2.AddOpponent(team);
round.Add(new Team[] { team, team2 });
}
if (round.Count == 0)
break;
rounds.Add(round);
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < rounds.Count; i++)
{
sb.AppendLine("Round " + (i + 1));
foreach (Team[] battle in rounds[i])
{
sb.AppendLine(battle[0] + " - " + battle[1]);
}
}
return sb.ToString();
}
}
使用法:
TeamMatchup matchup = new TeamMatchup();
matchup.AddTeam(new Team("Team 1"));
matchup.AddTeam(new Team("Team 2"));
matchup.AddTeam(new Team("Team 3"));
matchup.AddTeam(new Team("Team 4"));
matchup.AddTeam(new Team("Team 5"));
matchup.AddTeam(new Team("Team 6"));
matchup.AddTeam(new Team("Team 7"));
matchup.AddTeam(new Team("Team 8"));
matchup.GenerateBattleRounds();
textBox1.Text = matchup.ToString();
出力:
Round 1
Team 1 - Team 2
Team 3 - Team 4
Team 5 - Team 6
Team 7 - Team 8
Round 2
Team 1 - Team 3
Team 2 - Team 4
Team 5 - Team 7
Team 6 - Team 8
Round 3
Team 1 - Team 4
Team 2 - Team 3
Team 5 - Team 8
Team 6 - Team 7
Round 4
Team 1 - Team 5
Team 2 - Team 6
Team 3 - Team 7
Team 4 - Team 8
Round 5
Team 1 - Team 6
Team 2 - Team 5
Team 3 - Team 8
Team 4 - Team 7
Round 6
Team 1 - Team 7
Team 2 - Team 8
Team 3 - Team 5
Team 4 - Team 6
Round 7
Team 1 - Team 8
Team 2 - Team 7
Team 3 - Team 6
Team 4 - Team 5
編集:
誰が、なぜこのソリューションに反対票を投じたのですか? ユーザーターゲットへの最初のヒントです。質問者がより詳細な回答を求めている場合は、より具体的に質問する (または少なくとも疑問符を使用する) 必要があります。