hdu 1716 排列2

来源:互联网 发布:北京精雕编程软件下载 编辑:程序博客网 时间:2024/05/17 04:43


http://acm.hdu.edu.cn/showproblem.php?pid=1716

坑爹的格式,害了我调了好几个小时!你妹!

这道题就是可重集的排列问题,利用递归求解,类似的详见算法竞赛入门经典118页!~~

#include <iostream>#include <algorithm>using namespace std;int flag,flag_fir;void print_permutation(int n,int *P,int *A,int cur){int i,j;if(cur==n){if(A[0]){if(A[0]!=flag){if(!flag_fir)cout<<endl;flag_fir=0; flag=A[0];}else cout<<" ";for(i=0;i<n;i++) cout<<A[i];}}else for(i=0;i<n;i++)if(!i||P[i]!=P[i-1]){int c1=0,c2=0;for(j=0;j<cur;j++) if(A[j]==P[i]) c1++;for(j=0;j<n;j++) if(P[j]==P[i]) c2++;if(c1<c2){A[cur]=P[i];print_permutation(n,P,A,cur+1);}}}int main(){int n,A[4],cur;int P[4];int flag_shit=1;//这道题格式太shit了!!! int S[1000][4];int i;for(i=0;;i++){cin>>S[i][0]>>S[i][1]>>S[i][2]>>S[i][3];if(!(S[i][0]||S[i][1]||S[i][2]||S[i][3]))break;}for(int k=0;k<i;k++) {P[0]=S[k][0]; P[1]=S[k][1];P[2]=S[k][2];P[3]=S[k][3]; flag=-1; flag_fir=1; sort(P,P+4);cur=0;print_permutation(4,P,A,cur);cout<<endl;if(k!=i-1) cout<<endl; }return 0;}


原创粉丝点击