new hdoj 1515 (pe)(但是我可以做出来了)(搜索,注意剪枝)

来源:互联网 发布:origin制图软件下载 编辑:程序博客网 时间:2024/05/16 04:49
#include<iostream>#include<stdio.h>#include<string>using namespace std;#define  MAX 100char a[MAX];char b[MAX];char c[MAX];//出战的结果char s[MAX];//栈char path[MAX];int akey=-1;//指针指的是当前的元素int ckey=-1;int skey=-1;int len;int inum=0;int onum=0;int same(){int i=0;for(i=0;i<len;i++){if(c[i]!=b[i])return 0;}return 1;}void out(){int i=0;for(i=0;i<2*len-1;i++){printf("%c ",path[i]);}printf("%c\n",path[2*len-1]);}void  bfs(int level){//如果到最后一层,输入,同时不要进入下一层if(level>=len*2){//如果两个字符串相同if(same()){out();}}else{//进站path[level]='i';skey++;akey++;inum++;if(inum<=len){s[skey]=a[akey];bfs(level+1);}//保护现场path[level]=' ';s[skey]=' ';skey--;akey--;inum--;//出战path[level]='o';ckey++;onum++;c[ckey]=s[skey];s[skey]=' ';skey--;if(onum<=inum&&c[ckey]==b[onum-1])bfs(level+1);path[level]=' ';skey++;s[skey]=c[ckey];c[ckey]=' ';ckey--;onum--;}}void init(){akey=-1;//指针指的是当前的元素ckey=-1;skey=-1;len;inum=0;onum=0;a[0]='\0';b[0]='\0';c[0]='\0';s[0]='\0';path[0]='\0';}int main(){//freopen("in.txt","r",stdin);while(scanf("%s %s",a,b)!=EOF){len=strlen(a);printf("[\n");bfs(0);printf("]\n");}return 0;}