시퀀스 서브셋 생성하기
비트 벡터법
비트 벡터 B[1], B[i]=1을 구성하고, i가 서브집합 A에서만 다음과 같이 귀속된다.
#include
#include
#include
#include
using namespace std;
const int maxn=100;
char A[maxn]="abcde";//
int B[maxn];//
void print_subset(int n,int *B,int cur)
{ //
// A ,
if(cur==n)
{//
for(int i=0;iif(B[i])
{
printf("%c ",A[i]);
}
}
printf("
");
return ;
}
B[cur]=1;// cur
print_subset(n,B,cur+1);
B[cur]=0;
print_subset(n,B,cur+1);
}
int main()
{
int n=strlen(A);
print_subset(n,B,0);
}
이진법
#include
#include
#include
#include
using namespace std;
const int maxn=100;
char A[maxn];//
void print_subset(int n,int s)
{
for(int i=0;iif(s&(1<printf("%c ",A[i]);
}
printf("
");
}
void subset(int n)
{//n
for(int i=1;i1<int main()
{ //
cin>>A;
int n=strlen(A);
cout<1);//
return 0;
}
이 두 가지 방법은 모두 순서를 정하는 기교를 채택하여 하나의 집합 매거량 횟수를 피했다. (정렬 복합 사전 순서를 주면 각 하위 서열도 사전 순서에 부합된다) 모든 하위 서열을 사전 순서에 따라 출력하려면 출력 수조의 내용은vector 수조에 존재한다.
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn=1e5;
char A[maxn];//
vector<string> ord;//
void print_subset(int n,int s)
{
string str;
for(int i=0;iif(s&(1<void subset(int n)
{//n
for(int i=1;i1<int main()
{ //
cin>>A;
int n=strlen(A);
subset(n);// n
sort(ord.begin(),ord.end());
for(int i=0;icout<return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
앞의 순서와 중간의 순서에 따라 두 갈래 나무를 구성하다사고방식: 앞의 첫 번째 알파벳은 나무의 뿌리 노드이다. 그리고 중서 서열에 있는 이 알파벳의 위치를 본다. 앞의 알파벳은 왼쪽 트리이고, 뒤의 알파벳은 오른쪽 트리이다. 그리고 각각 이 두 개의 하위 트리의 앞순서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.