HDU 1515

简单题,直接用STACK模拟整个过程。

模拟出栈时,应注意保护现场,等到递归完成后返回。

 1 #include <iostream>
 2 #include <string.h>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int MAX=105;
 7 
 8 char ans[MAX*2];
 9 char s[MAX],t[MAX];
10 int Stack[MAX];
11 int lens,lent;
12 void dfs(int sp,int tp,int top,int anst,int op){
13     if(op==-1){
14         ans[++anst]='o';
15         top--;
16         tp++;
17     }
18     else if(op==1){
19         Stack[++top]=s[sp++];
20         ans[++anst]='i';
21     }
22     if(sp>=lens){
23         for(int i=top;i>=1;i--){
24             if(Stack[i]==t[tp++])
25             ans[++anst]='o';
26             else return ;
27         }
28         for(int i=1;i<=anst;i++)
29         printf("%c ",ans[i]);
30         printf("\n");
31         return;
32     }
33     dfs(sp,tp,top,anst,1);
34     if(Stack[top]==t[tp]&&top>0){
35         char tmp=Stack[top];
36         dfs(sp,tp,top,anst,-1);
37         Stack[top]=tmp;
38     }
39 }
40 
41 int main(){
42     while(cin>>s>>t){
43         lens=strlen(s); lent=strlen(t);
44         if(lens!=lent){
45             printf("[\n");
46             printf("]\n");
47             continue;
48         }
49         printf("[\n");
50         dfs(0,0,0,0,0);
51         printf("]\n");
52     }
53 }
View Code

 

posted @ 2014-06-23 09:23  chenjunjie1994  阅读(170)  评论(0编辑  收藏  举报