我正在進行一段時間對我感興趣的編程練習。此練習的目標是以編程方式爲季節生成壘球時間表。我正在尋找的是一般性建議,而不是特定的建議,因爲我正在嘗試在過程中學習一些東西。幫助創建計劃生成器
我真的很苦惱的一部分是如何生成一個晚上玩的所有遊戲。這是我試圖在第一次交互中實現的基本功能。
問題: 給出一個團隊列表,生成一個時間表,每個團隊玩2場比賽,並且沒有球隊可以在一個晚上兩次玩同一個球隊。
我正在進行一段時間對我感興趣的編程練習。此練習的目標是以編程方式爲季節生成壘球時間表。我正在尋找的是一般性建議,而不是特定的建議,因爲我正在嘗試在過程中學習一些東西。幫助創建計劃生成器
我真的很苦惱的一部分是如何生成一個晚上玩的所有遊戲。這是我試圖在第一次交互中實現的基本功能。
問題: 給出一個團隊列表,生成一個時間表,每個團隊玩2場比賽,並且沒有球隊可以在一個晚上兩次玩同一個球隊。
我去,我在維基百科上發現循環賽實施 http://en.wikipedia.org/wiki/Round-robin_tournament
爲圓知更鳥的標準算法是每個參賽者一個號碼分配和它們配對過在第一輪...
1 2 3 4 5 6 7
14 13 12 11 10 9 8
...然後修復一個競爭對手(在這個例子中排名第一)和旋轉等順時針...
1 14 2 3 4 5 6
13 12 11 10 9 8 7
1 13 14 2 3 4 5
12 11 10 9 8 7 6
...直到你最後幾乎回到初始位置
1 3 4 5 6 7 8
2 14 13 12 11 10 9
看起來你可以簡單地通過旋轉你的團隊列表來做到這一點。
例如鑑於球隊1..10,這樣做:
Team A: 1 2 3 4 5 6 7 8 9 10
Team B: 2 3 4 5 6 7 8 9 10 1
所以在遊戲中一個,一隊隊扮演B.對於兩場比賽,再次旋轉:
Team A: 1 2 3 4 5 6 7 8 9 10
Team B: 3 4 5 6 7 8 9 10 1 2
9場比賽會給你一個完整的圓-robin,然後你可以從頭開始。成對的比賽爲你的夜間比賽。
編輯
Kylotan指出,這實際上並不工作,因爲它的每隊一次打兩次。哎呀。如果你想出了一些真正有用的東西,我鼓勵你發佈它並接受它:-)
使用這種循環。你將隊伍放在一個環中,然後旋轉環。
Team A: 1 2 3
Team B: 4 5 6
Team A: 4 1 2
Team B: 5 6 3
Team A: 5 4 1
Team B: 6 3 2
Team A: 6 5 4
Team B: 3 2 1
Team A: 3 6 5
Team B: 2 1 4
以下解決方案可能不是最好的,但看看它是否適用於您。
我通過創建一個結構來保持每場比賽
public struct Game {
private int TeamA;
private int TeamB;
private bool GamePlayed;
// I am adding this to quickly see what team is playing. I used this for debugging
// purposes to make sure the same team doesn't play another team twice.
public override ToString() {
return TeamA.ToString() + " vs. " + TeamB.ToString();
}
}
然後,我創建comtains的10支球隊打對方的所有不同的組合列表中開始。應該有45個。
List<Game> AllGamesInSchedule = new List<Game>();
for (int i = 1; i <= 10; i++) {
for (int j = (i + 1); j <= 10; j++) {
AllGamesInSchedule.Add(new Game(i, j));
}
}
// This prints all the different game combinations out to the console to see
// that they are all different.
foreach (Game game in AllGamesInSchedule) {
Console.WriteLine(game.ToString());
}
現在你可以創建一個從這個列表中選擇遊戲的方法。一旦選擇了遊戲,將GamePlayed字段更改爲true,以知道不應再次選擇該匹配。或者你可以從列表中刪除遊戲。
你說你想得到指導,這就是爲什麼我沒有創建出遊戲的方法。
希望這有助於。
我知道必須有一個簡單而優雅的解決方案來解決這個問題。這克服了幾個挑戰中的第一個。 – 2009-08-03 15:07:22
我實現了這個解決方案,它工作。我認爲唯一的問題是它看起來太過計算機生成,但這是我可以生活的東西 – 2009-08-04 12:05:35