n支隊伍比賽

n支隊伍比賽,分別編號爲0,1,2。。。。n-1,已知它們之間的實力對比關係,
存儲在一個二維數組w[n][n]中,w[i][j] 的值代表編號爲i,j的隊伍中更強的一支。
所以w[i][j]=i 或者j,現在給出它們的出場順序,並存儲在數組order[n]中,
比如order[n] = {4,3,5,8,1......},那麼第一輪比賽就是 4對3, 5對8。.......
勝者晉級,敗者淘汰,同一輪淘汰的所有隊伍排名不再細分,即可以隨便排,
下一輪由上一輪的勝者按照順序,再依次兩兩比,比如可能是4對5,直至出現第一名
編程實現,給出二維數組w,一維數組order 和 用於輸出比賽名次的數組result[n],
求出result。


//coder:Lee,20120320

#include<iostream>
#include<cassert>
using namespace std;
void GameResult(int  w[][4],int *order,int n)
{
assert(w!=NULL&&*w!=NULL&&order!=NULL&&n>0);
if(n==1)
return;
int *result=new int[n];
int eliminationIndex=n/2;
if(n%2==1)
eliminationIndex+=1;
for(int i=0;i<n/2;i++)
{
if (w[order[2*i]][order[2*i+1]]==order[2*i])
{
result[i]=order[2*i];
result[i+eliminationIndex]=order[2*i+1];
}
else
{
result[i]=order[2*i+1];
result[i+eliminationIndex]=order[2*i];
}
}
if(n%2==1)
result[i]=order[2*i];
for(i=0;i<n;i++)
order[i]=result[i];
GameResult(w,order,eliminationIndex);
}




int main()
{


int w[4][4]={{0,0,2,3},{0,1,2,3},{2,2,2,2},{3,3,2,3}};
int order[4]={2,3,0,1};
GameResult(w,order,4);
for(int i=0;i<4;i++)
cout<<order[i]<<" ";
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章