栈的模拟题
给出进栈字符串和出栈字符串顺序,求所有可能的进栈出栈顺序。。且输出顺序按照字典顺序输出 由此可知 i<o 故一定是进栈优先 相当于dfs 先都进栈。。后判断是否出栈
注意格式 输出 对于每个进出栈可能中每个字符都要带空格 且结尾也有一个空格再回车 否则会pe
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define MAX_LEN 100 char a[MAX_LEN],b[MAX_LEN],stack[MAX_LEN],top,op[MAX_LEN]; void print(int k){ int i; for(i=0;i<k;i++) /*if(i)cout<<" "<<op[i]; else cout<<op[i];*/ cout<<op[i]<<" "; cout<<endl; } void dfs(int i,int j,int k){ if(j==strlen(b)){ print(k); return ; } //in if(i<strlen(a)){ stack[++top]=a[i++]; op[k++]=‘i‘; // print(k); dfs(i,j,k); top--; i--; k--; } //out 注意 恢复状态时 要将原来的b[j]重新放入栈中,如果只是通过top++ 可能原来的值已经发生改变 if(top!=-1){ if(b[j]==stack[top]){ j++; top--; op[k++]=‘o‘; // print(k); dfs(i,j,k); stack[++top]=b[--j]; k--; } } } int main() { while(cin>>a>>b){ top=-1; cout<<"[\n"; if(strlen(a)==strlen(b))dfs(0,0,0); cout<<"]\n"; } return 0; }