转载自:http://blog.csdn.net/ylf13/article/details/13627263
#include "stdafx.h" //============================================================================ // Name : CompetitionWinner.cpp // Author : YLF // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> using namespace std; #define MAX 10 /* * just like a heap sort!! */ void Competition(int** matrix, int row, int col, int* order, int n); void Promote(int *order, int index); int main() { int i = 0, j = 0; int n = 0; //int (*matrix)[MAX]=new int[MAX][MAX]; int **matrix; matrix=new int*[MAX]; //注意*的位置 for(i=0;i<MAX;i++) matrix[i] = new int[MAX]; int order[MAX]; //输入队伍实力对比 cin>>n; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>matrix[i][j]; //输入队伍参赛顺序 for(i=0;i<n;i++) cin>>order[i]; //比赛 Competition(matrix, n, n, order, n); //比赛结果 cout<<"比赛结果排名:"; for(i=0;i<n;i++) cout<<order[i]<<" "; delete []matrix; //释放堆内存*/ /*int (*a)[4]=new int[4][4]; /*for (int i=0;i<4;i++) { a[i]=new int[4]; }*/ //delete []a; return 0; } void Competition(int** matrix, int row, int col, int* order, int n){ int i = 0, j =0, index = 0; int winner = 0; while(n>1) { for(index=0;index<n;index+=2) { if(index+1 < n) { //偶数 这里的奇数偶数 指的是当前这一轮参赛的队伍总数是基数还是偶数 winner = matrix[order[index]][order[index+1]]; if(winner == order[index]) Promote(order,index); else Promote(order, index+1); } else { //奇数,这里作直接晋级处理 Promote(order,index); } } n = (n+1)/2; //重新计算进入下一轮循环赛的队伍总数 } } void Promote(int *order, int index){ int temp = order[index]; order[index] = order[index/2]; order[index/2] = temp; /*for (int i=0;i<4;i++) { cout<<order[i]<<" "; } cout<<endl;*/ //输出排序后的order数组 测试用 }