#include <iostream> #define DefaultSize 9 //问题描述: //12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? using namespace std; class Grial { public: Grial(int sz=DefaultSize) { visted = new bool [sz]; data = new int [sz]; size = sz; for(int i=1;i<=sz;i++) { visted[i]=0; } } bool check(int a[]) { if( (a[1]<a[2]&&a[2]<a[3]&&a[3]<a[4]&&a[4]<a[5]&&a[5]<a[6]&& a[1]>a[7]&&a[2]>a[8]&&a[3]>a[9]&&a[4]>a[10]&&a[5]>a[11]&&a[6]>a[12]&& a[7]<a[8]&&a[8]<a[9]&&a[9]<a[10]&&a[10]<a[11]&&a[11]<a[12] ) ) return true; return false; } void Insert(int start) { if(start==size+1) { int k = 0; if(check(data)) { for(int i=1;i<=size;i++) { cout<<data[i]<<" "; k++; if(k%6==0)cout<<endl; } cout<<"\033[35m-------------------------------------------------\033[0m"<<endl; } return ; } else { for(int i=1;i<=size;i++) { if(visted[i]==0) { data[start]=i; visted[i]=1; Insert(start+1); visted[i]=0; } } } } private: int size; bool *visted; int *data; }; int main() { Grial g(12); g.Insert(1); return 0; }
时间: 2024-10-13 01:51:08