给原始串和目标串
问怎么通过栈把原始串变成目标串
DFS一下每种操作【先搜入栈/后搜弹出】然后判断输出就好
坑在...每一种方案最后需要有个空格= =然后再换行,坑了一次PE
#include <bits/stdc++.h>
using namespace std;
char s1[100],s2[100];
int a[100],b[100];
int l1,l2;
int tem[100],ans[100];
stack<int> stk;
void Ok()
{
int flag=1;
if (l1!=l2)
return ;
for (int i=1; i<=l1; i++)
if (b[i-1]!=ans[i])
{
flag=0;
break;
}
if (flag==1)
{
for (int i=1; i<=2*l1; i++)
{
if (tem[i]==1)
cout<<"i ";
else
cout<<"o ";
}
cout<<endl;
}
return ;
}
void dfs(int nn,int opt,int l)
{
//cout<<opt<<" ";
if(opt==2*l1)
{
if (l!=l1) return;
Ok();
return ;
}
if (nn!=l1) //push
{
stk.push(a[nn]);
tem[opt+1]=1;
dfs(nn+1,opt+1,l);
stk.pop();
}
if (!stk.empty())//pop
{
int t=stk.top();
stk.pop();
tem[opt+1]=2;
ans[l+1]=t;
dfs(nn,opt+1,l+1);
stk.push(t);
}
return ;
}
void Gao()
{
memset(ans,0,sizeof(ans));
memset(tem,0,sizeof(tem));
while (!stk.empty())stk.pop();
l1=strlen(s1);
l2=strlen(s2);
if (l1!=l2)
return ;
for (int i=0; i<l1; i++)
a[i]=s1[i]-'a'+1;
for (int i=0; i<l2; i++)
b[i]=s2[i]-'a'+1;
dfs(0,0,0);
return ;
}
int main()
{
freopen("a.in","r",stdin);
while (scanf("%s",s1)!=EOF)
{
scanf("%s",s2);
cout<<"["<<endl;
Gao();
cout<<"]"<<endl;
}
return 0;
}