您的位置:首页 > 其它

1181:变形课

2015-09-29 19:51 218 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1181

方法:bfs

思路:题目要求寻找到有这样的咒语即可,所以用bfs就可以。不过本体的bfs比较特殊,并不是很符合套路,但是仍然可以按照模板写出。重点在与flag在什么位置清零,j在每一组数据完成之后一定要清零,另外还要注意mark数组一定要有,如果不标记,那么就会出现堆栈溢出的情况,因为很有可能一个单词开头结尾相同,那么他将无休止的调用自己。

难点:flag和索引清零的位置。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 1000000;
bool flag = 0;
int i = 0;
bool mark[MAX];
struct Word
{
char s;
char e;
}w[10000];

void dfs(Word m)
{
if(m.e == 'm')
{
flag = 1;
return;
}
for(int j = 0;j < i;j++)
{
if(m.e == w[j].s && mark[j] == 0)
{
mark[j] = 1;
dfs(w[j]);
mark[j] = 0;
}
}
}

int main()
{
string s;
while(cin>>s)
{
if(s == "0")
{
memset(mark,0,sizeof(mark));
for(int j = 0;j < i;j++)
{
if(w[j].s == 'b')
{
dfs(w[j]);
}
}
if(flag == 1)
cout<<"Yes."<<endl;
else
cout<<"No."<<endl;
flag = 0;
i = 0;
}
else
{
w[i].s = s[0];
w[i].e = s[s.length()-1];
i++;
}

}

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