poj 1953 Team Rankings

来源:互联网 发布:淘宝联名信用卡怎么用 编辑:程序博客网 时间:2024/05/24 04:01
//遍历所有的情况,即5!//重点在于每组数据与一种情况下,排序的值,即:如何写出排序值的算法 #include<iostream>#include<string.h>#include<math.h>#include<fstream>#define MAXSIZE 121using namespace std;int n=0,vis[MAXSIZE],t=0,minvalue=10001;char map[121][6],str[6],minstr[6],input[101][6];/* *用这种方式不能实现全排列 ,因为map[][]是一个二维数组 *//*void search(int index){int i=0;for(i=0;i<5;i++){ if(!vis[i]){map[index][i]=i+'A';vis[i]=1;search(i+1);vis[i]=0;}}}*//* *借助于额外的字符数组遍历所有的排序组合 */ void search(int index){int i=0;if(index==5){strcpy(map[t],str);t++;return ;}for(i=0;i<5;i++){if(!vis[i]){str[index]=i+'A';vis[i]=1;search(index+1);vis[i]=0;}}}int main(){//freopen("data_2038.txt","r",stdin);int i=0,j=0,k=0,l=0,value=0,temp[6];while(cin>>n&&n){search(0);for(i=0;i<n;i++){cin>>input[i];} for(i=0;i<120;i++){for(j=0;j<5;j++)temp[map[i][j]-'A']=j;value=0;for(k=0;k<n;k++){for(j=0;j<5;j++){for(l=j+1;l<5;l++){if(temp[input[k][l]-'A']<temp[input[k][j]-'A'])value++;}}} if(minvalue>value){minvalue=value;strcpy(minstr,map[i]);}} cout<<minstr<<" is the median ranking with value "<<minvalue<<"."<<endl;}return 0;}

0 0
原创粉丝点击