我正在瑞士系统锦标赛桌上工作,我几乎已经达到了这样的程度,我可以说,对于偶数,我已经让它工作但是还有一个关键的部分我的算法丢失了。那么,接下来的是我有不同属性的玩家但是对于这个问题,主要的三个属性是:
Player["hasPlayed"] = [] //which contains names of Players whom the Player have played with
Player["canPlay"] = [] //which contains names of Players whom the Player have not played with but could play.
Player["name"] = "" //Pretty self explainatory
所以现在我有六个不同的玩家留在桌子上,他们都在canPlay中有名字。因此,例如,玩家编号3可以很容易地在canPlay中具有两个名称而玩家编号只有一个名称,依此类推。有人可以考虑一下,也许会指出我正确的方向。我必须要提到的是,很明显一个玩家不能同时玩两个游戏,所以游戏必须以每个游戏有两个不同玩家的方式放置。
我的想法很少 - 我已经想过要花很多时间参加周期但是它非常混乱并且没有按照我希望的方式结果。然后我观察了组合算法,创造了不同类型的组合,但也失败了这个想法。
在这个特殊问题上,有聪明才智的人可以为我分享一些亮点吗?谢谢:))
function reastaArray(){
var newArr = jQuery.extend(true,[],playerLst); //see on meie main
var original = jQuery.extend(true,[],playerLst); //see on meie main
var inPlay = []; //siia hakkame lisama
var firstRound = true;
var i = 0;
var count = 0;
while (newArr.length != 0){
//seni teeme kuni main-is elemente on veel
count = i;
hereiam = false;
if (inPlay.length % 2 == 0){
inPlay.push(newArr[i]);
newArr.splice(i,1);
}
else{
//vähemalt teine round: inPlay.length != 0!
var lastEl = inPlay[inPlay.length-1];
var element = newArr[i];
var played = hasPlayed(element,lastEl);
while (played == true){
count += 1;
//alert(count + " = count ja "+newArr.length+" = newArr.length");
if (count == newArr.length){
var hereiam = true;
finalMatch = inPlay[inPlay.length-1];
inPlay.splice(inPlay.length-1,1);
lastfromPlay = inPlay[inPlay.length-1];
inPlay.splice(inPlay.length-1,1);
secondLastfromPlay = inPlay[inPlay.length-1];
inPlay.splice(inPlay.length-1,1);
newArr.push(finalMatch);
newArr.push(lastfromPlay);
newArr.push(secondLastfromPlay);
returner = canPlayFunc(newArr);
if (returner == true){
played = false;
}
else{
el_one = inPlay[inPlay.length-1];
inPlay.splice(inPlay.length-1,1);
el_two = inPlay[inPlay.length-1];
inPlay.splice(inPlay.length-1,1);
newArr.push(el_two);
newArr.push(el_one);
returner = canPlayFunc(newArr);
//Here i'd put the combinationmaker
played = false;
alert(played);
if (returner == true){
played = false;
}
else{
}
}
}
else{
element = newArr[count];
played = hasPlayed(element,lastEl);
}
}
if (hereiam == false){
//nüüd teame, et meil on mingi element, millega eelmine element ei ole mänginud
inPlay.push(element);
newArr.splice(count,1);
}
}
}
return inPlay;
}