您的位置:首页 > 其它

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

2013-05-05 01:16 375 查看
#include<iostream>
#include<stdio.h>
#include<string>

using namespace std;
#define  MAX 100

char 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: