突然想练练了,就随便看了一道oj上的题。
好久没做题了,差不多忘完了,想到了用dfs,实现的时候却有些想不周到,查了查看了看,想了想递归的结束条件,发现其实是一道水题。
不过还是看了别人的才恍然大悟的。
自己敲了一下代码,dfs记得还算清晰吧,只是发现没有网上一篇写的更漂亮,就改了改自己的,这下看着舒服多了
#include<stdio.h>
#include<string.h>
char sc[300],stack[300];
char ter[300];
int path[500];
int len,p,top;
void pri()
{
int i;
for(i=0;i<2*len;i++)
if(path[i]==1) printf("i ");
else printf("o ");
printf("\n");
}
void dfs(int ps,int pt)
{
char temp;
if(ps==len&&pt==len){
pri();
return;
}
if(ps<len){
path[p++]=1;
stack[top++]=sc[ps];
dfs(ps+1,pt);
top--;
p--;
}
if(top>0&&stack[top-1]==ter[pt]){
temp=stack[top-1];
path[p++]=0;
top--;
dfs(ps,pt+1);
p--;
top++;
stack[top-1]=temp;
}
}
int main()
{
int x;
while(scanf("%s%s",sc,ter)!=EOF)
{
top=0;
p=0;
len=strlen(sc);
x=strlen(ter);
printf("[\n");
if(x==len)
dfs(0,0);
printf("]\n");
}
return 0;
}